SQL 服务器不接受 YYYY-MM-DD
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' `
当我尝试 运行 时,我看到了这个:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
但是,如果我以 YYYY-DD-MM
格式将日期重写为 2021-31-12
和 2021-12-30
,它们将被接受。
我无法真正对其进行转换或格式化,因为我们系统中的 sql 查询数量众多,而且这样做的方式几乎是不可能的。有什么可以做的吗?我尝试更改 windows' 日期格式但无济于事。
对于 datetime
和 smalldatetime
数据类型,格式 yyyy-MM-dd
是 而不是 明确的(请注意,它 是 对于较新的日期和时间数据类型)。如果您不是美国人,日期很可能会被解释为 yyyy-dd-MM
,并且由于一年中没有 31 个月,您会收到错误消息。
对于SQL服务器,无论数据类型和语言设置如何,明确的格式是yyyyMMdd
和yyyy-MM-ddThh:mm:ss.nnnnnnn
;理想情况下,如果您使用字符串文字,请使用其中一种格式,因为您永远不会出错(除非您合法地拥有无效日期)。
否则,您可以使用样式代码明确 CONVERT
您的值:
SELECT CONVERT(datetime, '2021-12-31', 126);
您的新数据库实例似乎在重新安装后选择了新的语言。
当前语言设置决定了所有系统消息使用的语言,以及要使用的 date/time 格式。
日期格式设置会影响字符串在转换时的解释
到数据库中存储的日期值。不影响日期数据类型值的显示
存储在数据库或存储格式中。
您可以运行以下语句return当前使用的语言:
SELECT @@LANGUAGE;
这将告诉我们当前的语言是什么以及日期格式(以及其他一些内容):
DBCC USEROPTIONS;
日期格式可通过以下语句修改:
SET LANGUAGE us_english;
SET DATEFORMAT YMD;
这是一篇关于该主题的好文章:How to Change the Current Date Format in SQL Server (T-SQL)
也可以全局修改SQL服务器实例默认语言,一劳永逸:How to change default language for SQL Server?
我的本地 SQL Server 2016 安装程序在重新安装后决定不接受 YMD 日期格式。例如,以下查询在我的同事的设置中曾经并且仍然被接受:
SELECT "id"
FROM test.dbo.tabEmp
WHERE "DateAdmission" <= '2021-12-31' AND "DateAdmission">= '2021-12-30' `
当我尝试 运行 时,我看到了这个:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
但是,如果我以 YYYY-DD-MM
格式将日期重写为 2021-31-12
和 2021-12-30
,它们将被接受。
我无法真正对其进行转换或格式化,因为我们系统中的 sql 查询数量众多,而且这样做的方式几乎是不可能的。有什么可以做的吗?我尝试更改 windows' 日期格式但无济于事。
对于 datetime
和 smalldatetime
数据类型,格式 yyyy-MM-dd
是 而不是 明确的(请注意,它 是 对于较新的日期和时间数据类型)。如果您不是美国人,日期很可能会被解释为 yyyy-dd-MM
,并且由于一年中没有 31 个月,您会收到错误消息。
对于SQL服务器,无论数据类型和语言设置如何,明确的格式是yyyyMMdd
和yyyy-MM-ddThh:mm:ss.nnnnnnn
;理想情况下,如果您使用字符串文字,请使用其中一种格式,因为您永远不会出错(除非您合法地拥有无效日期)。
否则,您可以使用样式代码明确 CONVERT
您的值:
SELECT CONVERT(datetime, '2021-12-31', 126);
您的新数据库实例似乎在重新安装后选择了新的语言。
当前语言设置决定了所有系统消息使用的语言,以及要使用的 date/time 格式。
日期格式设置会影响字符串在转换时的解释 到数据库中存储的日期值。不影响日期数据类型值的显示 存储在数据库或存储格式中。
您可以运行以下语句return当前使用的语言:
SELECT @@LANGUAGE;
这将告诉我们当前的语言是什么以及日期格式(以及其他一些内容):
DBCC USEROPTIONS;
日期格式可通过以下语句修改:
SET LANGUAGE us_english;
SET DATEFORMAT YMD;
这是一篇关于该主题的好文章:How to Change the Current Date Format in SQL Server (T-SQL)
也可以全局修改SQL服务器实例默认语言,一劳永逸:How to change default language for SQL Server?