Відповіді:
Трохи хакі, але треба працювати:
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 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 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 CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
У деяких місцевостях, таких як іврит, існують високосні місяці, що залежать від року, щоб уникнути помилок у таких локалях, ви можете розглянути наступне рішення:
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
Починаючи з 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
Просто відніміть поточний місяць від сьогоднішньої дати, а потім додайте свій номер місяця. Потім скористайтеся функцією імені дати, щоб вказати повне ім'я в усіх рядках.
print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
Цей працював на мене:
@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 )
Пояснення:
MonthNumber
DatePart
який номер повернення місяцяПрацює для мене
SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
Ви можете отримати таку дату. наприклад: - Таблиця користувачів
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-сервері немає визначеної системою функції. Але ви можете створити власну визначену користувачем функцію - скалярну функцію. Ви знайдете скалярні функції в Провіднику об’єктів для вашої бази даних: Програмованість-> Функції-> Функції, що оцінюються за шкалою. Нижче я використовую змінну таблиці, щоб зібрати все це разом.
--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]
Ви можете створити таку функцію, щоб генерувати Місяць та робити SELECT dbo.fn_GetMonthFromDate (date_column) як місяць FROM table_name
/****** Object: UserDefinedFunction [dbo].[fn_GetMonthFromDate] Script Date: 11/16/2018 10:26:33 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_GetMonthFromDate]
(@date datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @monthPart int
SET @monthPart = MONTH(@date)
IF @monthPart = 1
BEGIN
RETURN 'January'
END
ELSE IF @monthPart = 2
BEGIN
RETURN 'February'
END
ELSE IF @monthPart = 3
BEGIN
RETURN 'March'
END
ELSE IF @monthPart = 4
BEGIN
RETURN 'April'
END
ELSE IF @monthPart = 5
BEGIN
RETURN 'May'
END
ELSE IF @monthPart = 6
BEGIN
RETURN 'June'
END
ELSE IF @monthPart = 7
BEGIN
RETURN 'July'
END
ELSE IF @monthPart = 8
BEGIN
RETURN 'August'
END
ELSE IF @monthPart = 9
BEGIN
RETURN 'September'
END
ELSE IF @monthPart = 10
BEGIN
RETURN 'October'
END
ELSE IF @monthPart = 11
BEGIN
RETURN 'November'
END
ELSE IF @monthPart = 12
BEGIN
RETURN 'December'
END
RETURN NULL END
Найпростіший спосіб - викликати функцію MONTHNAME(your_date)
. your_date може стати статичним значенням або значенням з одного з ваших полів таблиці.
ВИБІР МІСЬКОГО МІСЯЦЯ (concat ('1970 -', [Місяць int val], '- 01'))
Приклад - ВИБІР МІСЯЦЯ (konkat ('1970 -', 4, '- 01'))
відповідь- квітень