问题描述
Declare @i int=1;
select FORMAT(DATEFROMPARTS(1900,@i,1),'MMM','en-US')
解决方法
DATEFROMPARTS
是SQL Server 2012中引入的。SQLServer 2008(不受支持的SQL Server版本)对该功能一无所知。如果需要SQL 2008中的功能,则需要创建实现。示例:
CREATE FUNCTION dbo.udf_DateFromParts (@year int,@month int,@day int)
RETURNS date
AS
BEGIN
RETURN DATEADD(day,@day-1,DATEADD(month,@month-1,DATEADD(year,@year-1,CAST('0001-01-01' AS date))));
END;
GO
类似地,FORMAT
也已在SQL Server 2012中引入。您需要对此具有SQLCLR函数含义。
如果要使用月份名称,请使用datename()
:
select left(datename(month,convert(date,convert(varchar(255),19000001 + @i * 100
)
)
),3)
从技术上讲,迄今为止的明确转换是不必要的:
select left(datename(month,19000001 + 1 * 100)),3)
,
SQL Server 2008中不存在您要调用的内置函数
我个人不会麻烦从月份数字构造日期,然后再调用函数来获取缩写的月份字符串。
您可以使用
SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',@i*3-2,3)