Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql FORMAT()不是内置函数_Sql_Sql Server_Tsql - Fatal编程技术网

Sql FORMAT()不是内置函数

Sql FORMAT()不是内置函数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要从GETDATE()中检索月份和年份。我正在使用 SELECT FORMAT(GETDATE(), 'MM-yyyy') 它返回的正确值为“03-2019”。 一旦我将上述代码段应用到存储过程中,它就会抛出 格式不是内置函数 所以我切换到下面的语句,它返回相同的输出 SELECT RIGHT(CONVERT(VARCHAR(10),GETDATE(),105),7) 为什么SQL Server在存储过程中使用FORMAT但在SQLSELECT语句中使用时返回错误消息 带FORMAT(

我需要从
GETDATE()
中检索月份和年份。我正在使用

SELECT FORMAT(GETDATE(), 'MM-yyyy') 
它返回的正确值为“03-2019”。 一旦我将上述代码段应用到存储过程中,它就会抛出

格式不是内置函数

所以我切换到下面的语句,它返回相同的输出

SELECT RIGHT(CONVERT(VARCHAR(10),GETDATE(),105),7)
为什么SQL Server在存储过程中使用
FORMAT
但在SQL
SELECT
语句中使用时返回错误消息


带FORMAT()的存储过程在SQL server 2014中执行,但在SQL 2017中抛出错误

FORMAT函数从2012版起可用


你能检查一下
SELECT@@version

看起来兼容性级别设置为
compatibility\u level=100
。 这对应于SQL Server 2008。这就是为什么该功能不可用的原因

可通过以下方式检查兼容性级别:

SELECT name, compatibility_level FROM sys.databases
可通过以下方式将其设置为现代价值:

-- 140 = SQL Server 2017
ALTER DATABASE [yourDb] SET COMPATIBILITY_LEVEL = 140

这也可以作为一个评论而不是一个答案。亚历山大的答案很可能是正确的,但是,你应该读亚伦·伯坦德的。底线是,由于性能问题,当可以进行简单转换时,可能应该避免使用格式。另外,作为旁注,您可以直接转换为
char(7)
,而不是繁琐的
varchar(10)
,然后再转换为
right