Преобразование номера месяца в название в SQL без CASE

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

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

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

Для конвертации номера месяца в название на языке SQL воспользуйтесь функциями DATENAME и DATEFROMPARTS в SQL Server:

SQL
Скопировать код
-- SQL Server
SELECT DATENAME(month, DATEFROMPARTS(2023, @MonthNumber, 1)) AS MonthName;

В MySQL и Oracle для этого предназначены функции MONTHNAME и TO_CHAR:

SQL
Скопировать код
-- MySQL
SELECT MONTHNAME(STR_TO_DATE(@MonthNumber, '%m')) AS MonthName;

-- Oracle
SELECT TO_CHAR(TO_DATE(@MonthNumber, 'MM'), 'Month') AS MonthName;

Необходимо заменить значение @MonthNumber на соответствующий номер месяца. Код может быть модифицирован в зависимости от используемой СУБД.

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

Обработка нешаблонных ситуаций

Возможность получить название месяца без указания даты может потребоваться изредка – здесь пригодится небольшой трюк: создадим фиксированную базовую дату.

SQL
Скопировать код
-- SQL Server
SELECT DATENAME(month, DATEADD(month, @MonthNumber – 1, '19000101')) AS MonthName;

Чтобы взять сокращённые имена месяцев, например «Янв», «Фев», можно получить подстроку:

SQL
Скопировать код
-- SQL Server
SELECT SUBSTRING(CONVERT(varchar, DATEADD(month, @MonthNumber – 1, '19000101'), 107), 1, 3) AS ShortMonthName;

Если у нас фискальный год начинается, скажем, в апреле, код на SQL будет следующим:

SQL
Скопировать код
-- SQL Server
SELECT DATENAME(month, DATEADD(month, (@MonthNumber + 3) % 12, '19000101')) AS FiscalMonthName;

Все эти примеры демонстрируют, насколько универсальны могут быть функции SQL при работе с датами.

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

Месяцы — словно участники маскарада, их истинные имена раскрывает SQL:

Markdown
Скопировать код
| Маска (Номер) | Настоящее имя  |
| ---------------------------- | ------------------------- |
| 1                            | 🎭 Январь                 |
| 2                            | 🎭 Февраль                |
| 3                            | 🎭 Март                   |
| 4                            | 🎭 Апрель                 |
| 5                            | 🎭 Май                    |
| 6                            | 🎭 Июнь                   |
| 7                            | 🎭 Июль                   |
| 8                            | 🎭 Август                 |
| 9                            | 🎭 Сентябрь               |
| 10                           | 🎭 Октябрь                |
| 11                           | 🎭 Ноябрь                 |
| 12                           | 🎭 Декабрь                |

Повышение уровня

SQL на разных языках

Функции, чья работа зависит от языка, такие как DATENAME, учитывают текущую языковую настройку:

SQL
Скопировать код
-- SQL Server
SET LANGUAGE French;
SELECT DATENAME(month, @YourDate) AS MonthName;

SQL искусства

Увеличьте многогранность запросов, используя динамический SQL:

SQL
Скопировать код
-- SQL Server
DECLARE @sql NVARCHAR(MAX) = N'SELECT DATENAME(month, ''1900-'' + CAST(@MonthNumber AS VARCHAR) + ''-01'') AS MonthName';
EXEC sp_executesql @sql, N'@MonthNumber INT', @MonthNumber = 5;

Различия и многобразие форматов дат

Учитывайте локализацию, используйте форматы дат, специфичные для вашего региона:

SQL
Скопировать код
-- SQL Server
SELECT FORMAT(DATEFROMPARTS(2023, @MonthNumber, 1), 'MMMM', 'ja-JP') AS JapaneseMonthName;

Отслеживание ошибок

Проверяйте вводимые значения, чтобы избежать ошибок:

SQL
Скопировать код
-- SQL Server
IF @MonthNumber BETWEEN 1 AND 12
    SELECT DATENAME(month, DATEFROMPARTS(2023, @MonthNumber, 1)) AS MonthName;
ELSE
    RAISERROR('Некорректный номер месяца...', 16, 1);

SQL комфортно и безопасно работает с данными, будучи в тоже время и надёжным исследователем, и неприступным охранником.

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

  1. Функция SQL Server DATEPART() — использование DATEPART для конвертации номера месяца в название месяца в SQL Server.
  2. PostgreSQL: Функции и операторы работы с датой/временем — руководство по функциям обработки дат и времени в PostgreSQL.
  3. Руководство по MySQL 8.0: Функции даты и времени — функция MONTHNAME в MySQL для получения названия месяца.
  4. TO_CHAR (datetime) — преобразование даты в название месяца в Oracle.
  5. Функции даты и времени – SQLite — функция strftime() в SQLite для работы с датой и временем.
  6. Типы данных и функции даты и времени – SQL Server (Transact-SQL) — типы данных и функции для работы с датой и временем в SQL Server.