Преобразование номера месяца в функцию имени месяца в SQL

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

29 ответов


немного hacky, но должен работать:

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))

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

Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

или

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )

SELECT DATENAME(month, GETDATE()) AS 'Month Name'

SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)

используйте лучший способ

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))

Это очень просто.

select DATENAME(month, getdate())

выход:


для меня работает следующее:

CAST (GETDATE () КАК CHAR (3))


В дополнение к оригинальной

SELECT DATENAME(m, str(2) + '/1/2011')

вы можете сделать это

SELECT DATENAME(m, str([column_name]) + '/1/2011')

таким образом, вы получите имена для всех строк в таблице. где [имя_столбца] представляет собой целочисленный столбец, содержащий числовое значение от 1 до 12

2 представляет любое целое число, по строке контакта я создал дату, где я могу извлечь месяц. '/1 / 2011 ' может быть любой датой

Если вы хотите сделать это с переменным

DECLARE @integer int;

SET @integer = 6;

SELECT DATENAME(m, str(@integer) + '/1/2011')

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

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     

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

select CONVERT(varchar(3), Date, 100)  as Month from MyTable.

это отобразит первые 3 символа месяца (январь, февраль и т. д..)


используйте этот оператор для преобразования числового значения месяца в имя месяца.

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))

вы можете использовать convert functin как показано ниже

CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)

Это обязательно сработает --выберите datename (M,GETDATE ())


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

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))

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

SELECT DATENAME(month ,GETDATE())

чтобы преобразовать номер месяца в имя месяца, попробуйте ниже

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))

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

@MetricMonthNumber (some number)

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

из сообщения выше от @leoinfo и @Valentino Vranken. Просто сделал быстрый выбор, и он работает.


Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

объяснение:

  1. Первая Переменная Decalre MonthNumber
  2. получить текущий месяц DatePart какой номер месяца возврата
  3. Третий Запрос Возвращает Имя Месяца

выберите имя даты (месяц, dateadd (месяц, -3, getdate ()))


select monthname(curdate());

или

select monthname('2013-12-12');

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

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>

SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))

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

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                   |

используйте этот оператор для получения имени месяца:

DECLARE @date datetime
SET @date='2015/1/4 00:00:00'

SELECT CAST(DATENAME(month,@date )  AS CHAR(3))AS 'Month Name'

Это даст вам короткое название месяца. Вот так: Январь, Февраль, Март и т. д.


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

datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname

в SQL server нет системной функции. Но вы можете создать свою собственную пользовательскую функцию-скалярную функцию. Вы найдете скалярные функции в Обозревателе объектов для вашей базы данных: программируемость - >функции->скалярные функции. Ниже я использую переменную table, чтобы объединить все это.

--Create the user-defined function
CREATE FUNCTION getmonth (@num int)
RETURNS varchar(9) --since 'September' is the longest string, length 9
AS
BEGIN

DECLARE @intMonth Table (num int PRIMARY KEY IDENTITY(1,1), month varchar(9))

INSERT INTO @intMonth VALUES ('January'), ('February'), ('March'), ('April'), ('May')
                           , ('June'), ('July'), ('August') ,('September'), ('October')
                           , ('November'), ('December')

RETURN (SELECT I.month
        FROM @intMonth I
        WHERE I.num = @num)
END
GO

--Use the function for various months
SELECT dbo.getmonth(4) AS [Month]
SELECT dbo.getmonth(5) AS [Month]
SELECT dbo.getmonth(6) AS [Month]

начиная с SQL Server 2012, Вы можете использовать


to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')

здесь V_MONTH_NUM - номер месяца

SELECT to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')  from dual;

используйте этот оператор

SELECT TO_CHAR(current_date,'dd MONTH yyyy') FROM dual

это преобразует номер месяца в месяц полную строку