Преобразование номера месяца в функцию имени месяца в 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(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, чтобы дать полное имя все в 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 )
объяснение:
- Первая Переменная Decalre
MonthNumber
- получить текущий месяц
DatePart
какой номер месяца возврата - Третий Запрос Возвращает Имя Месяца
вы можете получить даты, как это. например:- пользователи таблица
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]
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
это преобразует номер месяца в месяц полную строку