在datetime数据类型的where子句中使用日期值

时间:2019-06-04 13:42:21

标签: sql sql-server tsql

如果要过滤的字段是日期时间,在where语句中使用日期时,我应该注意什么吗? WHERE Date ='20190604'是否实际上被解释为'2019-06-04 00:00:00'

对几个查询进行查询,以查看是否有任何值会根据日期格式的不同方式而下降。没有发现任何差异。

SELECT DateField
FROM CalendarTbl
WHERE DateField = '20190604'

3 个答案:

答案 0 :(得分:4)

如果您将'20190604'之类的字符串传递给datetime,则可以,它将被解释为日期和时间2019-06-04T00:00:00.000。这意味着,如果您有不在午夜时分使用的任何值,则不会返回该行(即使该值为2019-06-04T00:00:00.003)。

如果您确实有除午夜以外的其他值,并且想要返回特定日期的所有行,则可以使用CONVERT / CAST将列的数据类型更改为{{1} };仍然可以保存:

date

答案 1 :(得分:1)

是的,很好。您的字符串将隐式转换为所需的日期时间。我敢打赌,这是人工输入日期的最快方法。

检查the official documentation中的彩色表,以获取隐式和显式强制类型转换的列表。

答案 2 :(得分:1)

是的,SQL Server始终将字符串文字'20190604'解释为yyyymmdd-2019-06-04。如果仅提供日期,则时间假定为午夜-因此20190604等效于2019-06-04T00:00:00

请注意,如果您将2019-06-04DateTime数据类型一起使用,则它仍然取决于区域性。

如果要获取该特定日期的所有记录,则需要添加其他条件:

SELECT DateField
FROM CalendarTbl
WHERE DateField => '20190604'
AND DateField < '20190605'
相关问题