首页 > 解决方案 > 为什么在 SQL Server 中查询日期数据类型为 yyyymmdd 而不是 yyyy-mm-dd?

问题描述

就像标题所说的那样。我的教授在我的所有查询中标记了点,因为我以这种格式查询日期数据类型:yyyymmdd. 例子; 之间的日期yyyymmdd。而不是yyyy-mm-dd.

我只是想知道我是否可以为这些观点提出任何论据,因为这似乎很简单,因为查询仍然有效。

标签: sqlsql-server

解决方案


反对使用yyyy-mm-dd(没有时间)的一个很好的论点是,根据语言/DMY 设置1,SQL Server 可能会出错,从而导致不正确的查询2或错误:

set language british

select * from sys.objects where create_date between '2001-05-01' and '2001-05-30'

产生错误

Msg 242, Level 16, State 3, Line 3
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

这是因为,无论出于何种原因,SQL Server 都认为英国人使用yyyy-dd-mm(我们不这样做)。

yyyymmdd无论有效的语言设置如何,SQL Server都会明确解释。

请注意,这是特定于 SQL Server 的。


1请注意,我明确更改了此脚本中的设置,但即使没有它,某些用户的默认设置也可能导致相同的问题。

2例如来自评论的 Suraj Kumar 的例子:

select * from sys.objects where create_date between '2001-05-01' and '2001-05-11'

在 1 月 5 日至 11 月 5 日之间查询,而不是在 5 月 1 日至 11 日之间查询。


推荐阅读