Преобразование номера месяца в функцию имени месяца в SQL - PullRequest
196 голосов
/ 09 октября 2008

В SQL Server месяцы хранятся как 1,2,3,4, ... 12. Я хотел бы отобразить их как январь, февраль и т. Д. Есть ли в SQL Server такая функция, как MonthName (1) = январь? Я пытаюсь избежать заявления CASE, если это возможно.

Ответы [ 31 ]

4 голосов
/ 09 октября 2008

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

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     
3 голосов
/ 05 июля 2014

Конечно, это будет работать

select datename(M,GETDATE())
3 голосов
/ 09 ноября 2010

Вы можете использовать функцию преобразования как показано ниже

CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)
3 голосов
/ 30 сентября 2015

Просто вычтите текущий месяц из сегодняшней даты, затем добавьте обратно номер месяца. Затем используйте функцию datename, чтобы дать полное имя всем в 1 строке.

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
2 голосов
/ 04 октября 2012

Я думаю, этого достаточно, чтобы получить название месяца, когда у вас есть дата.

SELECT DATENAME(month ,GETDATE())
2 голосов
/ 23 марта 2018

Начиная с SQL Server 2012, вы можете использовать FORMAT и DATEFROMPARTS для решения этой проблемы. (Если вам нужны названия месяцев из других культур, измените: en-US)

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')

Если вы хотите трехбуквенный месяц:

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')

Если вы действительно хотите, вы можете создать функцию для этого:

CREATE FUNCTION fn_month_num_to_name
(
    @month_num tinyint
)
RETURNS varchar(20)
AS
BEGIN
    RETURN FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
END
2 голосов
/ 06 марта 2017

Чтобы преобразовать номер месяца в название месяца, попробуйте следующее

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))
1 голос
/ 22 сентября 2017

вы можете получить дату, как это. Например: - Пользователи Таблица

id name created_at
1  abc  2017-09-16
2  xyz  2017-06-10

вы можете получить название месяца, как это

select year(created_at), monthname(created_at) from users;

выход

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |
1 голос
/ 09 мая 2013
SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))
1 голос
/ 06 августа 2011

Этот работал для меня:

@MetricMonthNumber (some number)

SELECT 
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName

Из поста выше от @leoinfo и @Valentino Vranken. Просто сделал быстрый выбор, и это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...