BETWEEN运算符未在SQL Server 2005中正确比较日期

时间:2016-05-16 18:52:45

标签: sql sql-server-2005

我有一个简单的查询:

 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)

导致这种情况的原因是什么?

3 个答案:

答案 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'