Конвертация даты в формат 'YYYY-QX' в TSQL: год и квартал

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для вычисления квартала из даты используйте функцию TSQL DATEPART:

SQL
Скопировать код
SELECT DATEPART(QUARTER, @YourDate) AS Quarter;

В данном случае @YourDate — это дата, квартал которой вам нужно определить. В результате мы получим число от 1 до 4, обозначающее календарные кварталы от первого до четвёртого.

Кинга Идем в IT: пошаговый план для смены профессии

Указываем год: полная характеристика квартала

Для полноты характеристики квартала в вывод добавляем год. Таким образом, у вас появляется строка формата ГГГГ-КЧ:

SQL
Скопировать код
SELECT CAST(YEAR(@YourDate) AS VARCHAR(4)) + '-Q' + CAST(DATEPART(QUARTER, @YourDate) AS VARCHAR(1)) AS YearQuarter;

Обратите внимание на использование конкатенации строк с помощью + — это придает выводимому результату более аккуратный и понятный вид.

Работа с датами формата VARCHAR

Иногда даты указываются в формате строк (VARCHAR). Если преобразовать их в DATETIME, работа с датами станет намного удобнее:

SQL
Скопировать код
SELECT DATEPART(QUARTER, CAST(@YourDateString AS DATETIME)) AS Quarter;

Такой подход позволяет гарантированно избегать ошибок при приведении типов.

Определенное название кварталов

С помощью DATENAME можно получить словесное название квартала — это будет полезно при формировании названия для отчетов:

SQL
Скопировать код
SELECT 'The ' + DATENAME(QUARTER, @YourDate) + ' Quarter' AS VerboseQuarter;

Например, "Третий квартал" воспринимается намного понятнее, чем просто "3".

Визуализация

Представьте год как последовательность месяцев, объединенных в четыре группы:

Markdown
Скопировать код
Корзины = [ Янв, Фев, Мар | Апр, Май, Июн | Июл, Авг, Сен | Окт, Ноя, Дек ]

Каждая из этих групп соответствует своему кварталу:

Markdown
Скопировать код
Q1: [ Янв, Фев, Мар ]
Q2: [ Апр, Май, Июн ]
Q3: [ Июл, Авг, Сен ]
Q4: [ Окт, Ноя, Дек ]

Итак, допустим, у нас есть дата:

SQL
Скопировать код
SELECT DATEPART(QUARTER, '2023-05-15') AS Quarter; -- Очевидно, что она попадает в Q2!

Вывод:

Markdown
Скопировать код
'2023-05-15' ➡️ [ Апрель, Май, Июнь ] ➡️ **Q2**

Поздравляем, дата достигла второго квартала! 🎉

Продвинутый подход: Расчет кварталов вручную

Если у вас нет доступа к DATEPART, вы все равно можете рассчитать квартал вручную:

SQL
Скопировать код
SELECT CEILING(MONTH(@YourDate) / 3.0) AS Quarter;

Необходимо отметить, что этот метод является показателем настоящего мастерства — умение находить обходные пути разрешения задачи при ограниченных возможностях.

Общее табличное выражение (CTE) для сложных ситуаций

В случаях, когда столкнулись с более сложной задачей, или когда кварталы не соответствуют календарному году, вы сможете решить проблему с помощью CTE и явного определения кварталов:

SQL
Скопировать код
WITH QuarterMapping AS (
  SELECT 1 AS Month, 'Q1' AS Quarter UNION ALL
  SELECT 2, 'Q1' UNION ALL
  SELECT 3, 'Q1' UNION ALL
  SELECT 4, 'Q2' UNION ALL
  -- Продолжайте добавлять соответствия для оставшихся месяцев
)
SELECT m.Quarter
FROM YourDateTable d
JOIN QuarterMapping m ON m.Month = MONTH(d.DateColumn);

Такое использование CTE может быть неожиданно полезно в решении ряда задач.

Вариативность форматов

Хотите присвоить кварталу уникальный формат? Используйте сочетание функций конкатенации и CONVERT:

SQL
Скопировать код
SELECT 'Q' + CONVERT(CHAR(1), DATEPART(QUARTER, @YourDate)) + ' – ' + CONVERT(CHAR(4), YEAR(@YourDate)) AS CustomQuarterFormat;

Таким образом, вы сможете выразить свою индивидуальность, сохраняя при этом нужную информацию в удобном для вас формате.

Полезные материалы

  1. DATEPART (Transact-SQL) – SQL Server | Microsoft Learn
  2. CAST and CONVERT (Transact-SQL) – SQL Server | Microsoft Learn
  3. Настройка последовательного порта в VirtualBox для работы с Pyserial – Stack Overflow
  4. Типы данных даты и времени и функции – SQL Server (Transact-SQL) | Microsoft Learn
  5. Чек-лист DBA для проектирования и рецензирования архитектур систем SQL Server