'DATEFROMPARTS' 不是可识别的内置函数名称 - SQL Server 2008 错误

'DATEFROMPARTS' is not a recognized built-in function name- SQL Server 2008 error

Declare  @i int=1;
select FORMAT(DATEFROMPARTS(1900, @i, 1), 'MMM', 'en-US')

我在 SQL Server 2008 中执行时遇到错误。

'DATEFROMPARTS' is not a recognized built-in function name.

DATEFROMPARTS 是在 SQL Server 2012 中引入的。SQL Server 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, convert(varchar(255), 19000001 + 1 * 100)), 3)

SQL Server 2008

中不存在您调用的内置函数

就我个人而言,我不会费心从月份数字构造日期,然后调用函数来获取缩写的月份字符串。

您可以使用

SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',@i*3-2,3)