如果要过滤的字段是日期时间,在where语句中使用日期时,我应该注意什么吗? WHERE Date ='20190604'是否实际上被解释为'2019-06-04 00:00:00'
对几个查询进行查询,以查看是否有任何值会根据日期格式的不同方式而下降。没有发现任何差异。
SELECT DateField
FROM CalendarTbl
WHERE DateField = '20190604'
答案 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-04
与DateTime
数据类型一起使用,则它仍然取决于区域性。
如果要获取该特定日期的所有记录,则需要添加其他条件:
SELECT DateField
FROM CalendarTbl
WHERE DateField => '20190604'
AND DateField < '20190605'