SQL Server 不接受 YYYY-MM-DD

Les*_*ago 1 sql-server datetime date date-formatting

我的本地 SQL Server 2016 设置在重新安装后决定不接受 YMD 日期格式。例如,以下查询在我同事的设置中过去和现在仍然被接受:

SELECT "id"  
FROM  test.dbo.tabEmp 
WHERE  "DateAdmission"  <= '2021-12-31' AND "DateAdmission">= '2021-12-30' ` 
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我看到这个:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

但是,如果我将日期重写为2021-31-122021-12-30,则YYYY-DD-MM它们会被接受。

我无法真正转换或格式化它,因为我们系统中的 sql 查询非常多,并且以几乎不可能的方式完成。有什么可以做的吗?我尝试更改 Windows 的日期格式但无济于事。

use*_*983 5

对于datetimesmalldatetime数据类型,格式yyyy-MM-dd并不明确(请注意,它适用于较新的日期和时间数据类型)。如果您不是美国人,该日期很可能会被解释为yyyy-dd-MM,并且由于一年中没有 31 个月,您会收到错误。

对于 SQL Server,无论数据类型和语言设置如何,明确的格式是yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn;理想情况下,如果您使用字符串文字,请使用其中一种格式,因为您永远不会收到错误(除非您合法地拥有无效日期)。

否则,您可以CONVERT使用样式代码明确您的值:

SELECT CONVERT(datetime, '2021-12-31', 126);
Run Code Online (Sandbox Code Playgroud)