我有一个简单的查询:
SELECT *
FROM TABLE
WHERE EventDateTime BETWEEN '2016-05-12 00:00:00' and '2016-05-12 23:59:59'
由于某种原因,查询输出包括日期时间为2016-05-13 00:00:00的行。
使用CAST将字符串转换为datetime会删除2015-05-13的值:
SELECT *
FROM TABLE
WHERE EventDateTime BETWEEN CAST('2016-05-12 00:00:00' AS DateTime) and CAST('2016-05-12 23:59:59' AS DateTime)
导致这种情况的原因是什么?
答案 0 :(得分:0)
你应该使用这样的东西:
SELECT *
FROM TABLE
WHERE EventDateTime >= '2016-05-12 00:00:00'
AND EventDateTime < '2016-05-13 00:00:00'
BETWEEN
运营商众所周知地“狡猾”才能做到正确......
答案 1 :(得分:0)
您可以选择以下查询。您可以在Date中投射EventDateTime而不是转换为To和From Date。这将返回准确的
SELECT *
FROM TABLE
WHERE CAST(EventDateTime as DATE) ='2016-05-12'
答案 2 :(得分:0)
对于SQL Server 2005,您可以使用以下代码:
SELECT *
FROM TABLE
WHERE CONVERT(VARCHAR(10),EventDateTime,111) ='2016/05/12'