SQL Server 2017 中的默认日期格式

Default Date Formatting in SQL Server 2017

我目前正在调试需要从存储过程中的字符串中读取日期的场景。

我们使用的代码是一个简单的转换语句。 例如

SELECT CONVERT(DATETIME, @dateInput) 

当我需要测试来自 ISO 102 的中文日期格式 (yyyy.mm.dd) 的日期时,问题就来了。

Windows 10 / SQL服务器中的哪些设置必须设置,这样运行 SELECT CONVERT(DATETIME, '2020.05.16') 就不会return “将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”

我知道使用 SELECT CONVERT(DATETIME, '2020.05.16', 102) 会起作用,但是当 运行 不同的 windows 日期格式

时,这会使通用存储过程不正确

除了更改我的 windows 设置以反映相同的日期格式外,我还更改了:

  • 我的 SQLEXPRESS 服务器的默认语言 Properties > Advanced > Default Language

  • 我的 SQL 用户登录的默认语言 属性 > 常规 > 默认语言

这意味着它可以读取直接字符串值而不需要 ISO 102 标识符。

如果输入值始终采用 yyyy.MM.dd 格式,则使用适当的样式代码(不要依赖 LOGIN 的语言设置):

DECLARE @StringInput varchar(10) = '2020.05.16';
SELECT CONVERT(datetime,@StringInput,102);

但是,理想情况下,首先不要将参数定义为 varchar,而是将其定义为 datetime,并让应用程序传递正确的数据类型;不是字符串。但对于您的应用程序所使用的语言,这是一个不同的问题。