'DATEFROMPARTS'不是公认的内置函数名称-SQL Server 2008错误

问题描述

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

sql Server 2008中执行时出现错误

“ DATEFROMPARTS”不是公认的内置函数名称

解决方法

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)