SQL Server not accepting YYYY-MM-DD



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

SELECT "id"  
FROM  test.dbo.tabEmp 
WHERE  "DateAdmission"  <= '2021-12-31' AND "DateAdmission">= '2021-12-30' ` 

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

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

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

我真的无法转换或格式化它,因为我们系统中的sql查询数量众多,而且这样做几乎是不可能的。有什么可以做的吗?我尝试更改windows的日期格式,但没有成功。

对于datetimesmalldatetime数据类型,格式yyyy-MM-dd而不是明确的(请注意,对于较新的日期和时间数据类型,它(。如果你不是美国人,那么日期很可能会被解释为yyyy-dd-MM,因为一年中没有31个月,所以你会出错。

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

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

SELECT CONVERT(datetime, '2021-12-31', 126);

在重新安装后,您的新DB实例似乎使用了一种新的语言

当前语言设置确定所有系统消息使用的语言,以及要使用的日期/时间格式。

日期格式设置会影响字符串转换时的解释用于存储在数据库中的最新值。它不影响日期数据类型值的显示其存储在数据库中或存储格式中。

您可以运行以下语句来返回当前使用的语言:

SELECT @@LANGUAGE;

这将告诉我们当前的语言和日期格式(以及其他一些内容(:

DBCC USEROPTIONS;

日期格式可通过以下语句进行修改:

SET LANGUAGE us_english;
SET DATEFORMAT YMD;

以下是一篇关于以下主题的好文章:如何更改SQL Server(T-SQL(中的当前日期格式

还可以一次性全局修改SQL Server实例默认语言:如何更改SQL Server的默认语言?

最新更新