Answers:
有点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 ) )
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')
这样,您将获得表中所有行的名称。其中[column_name]代表包含数值1到12的整数列
2代表任何整数,我通过联系字符串创建了一个可以提取月份的日期。“ / 1/2011”可以是任何日期
如果您想使用变量
DECLARE @integer int;
SET @integer = 6;
SELECT DATENAME(m, str(@integer) + '/1/2011')
使用此语句将Month数值转换为Month名称。
SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
从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
这个为我工作:
@MetricMonthNumber (some number)
SELECT
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName
来自@leoinfo和@Valentino Vranken的上述帖子。只是做了一个快速选择,它的工作原理。
你可以得到这样的日期。例如:- 用户表
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 |
这是我的解决方案,使用其他人提供的一些信息来解决问题。
datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
SQL Server中没有系统定义的功能。但是您可以创建自己的用户定义函数-标量函数。您将在数据库的对象资源管理器中找到标量函数:可编程性->函数->标量值函数。在下面,我使用一个表变量将它们组合在一起。
--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]
您可以创建一个像这样的函数来生成Month并选择dbo.fn_GetMonthFromDate(date_column)作为Month 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可以是静态值,也可以是表字段之一中的值。
SELECT MONTHNAME(concat('1970-',[Month int val],'-01'))
示例-SELECT MONTHNAME(concat('1970-',4,'-01'))
答案-四月