SQL日期比较问题

SQL日期比较问题,sql,sql-server,Sql,Sql Server,第一个查询怎么可能返回今天和昨天的记录,而第二个查询只返回昨天的记录 第一 第二 我不能使用BETWEEN,因为它只允许提供一个开始/结束日期。您错过了时间。您正在从技术上搜索2016-07-14 00:00:00至2016-07-15 00:00:00,其中仅包含2016-07-14数据 如果两天都需要查找,则: SELECT * FROM table WHERE DateTimeOfInsert >= '2016-07-14 00:00:00' AND

第一个查询怎么可能返回今天和昨天的记录,而第二个查询只返回昨天的记录

第一

第二


我不能使用BETWEEN,因为它只允许提供一个开始/结束日期。

您错过了时间。您正在从技术上搜索2016-07-14 00:00:00至2016-07-15 00:00:00,其中仅包含2016-07-14数据

如果两天都需要查找,则:

SELECT 
  * 
FROM 
  table
WHERE
    DateTimeOfInsert >= '2016-07-14 00:00:00' 
  AND 
    DateTimeOfInsert <= '2016-07-15 23:59:59'
或者简单地将其用于第二个条件

DateTimeOfInsert <= '20160716'
这意味着在2016-07-14 00:00:00到2016-07-16 00:00:00之间,为什么不使用between

您的查询应该如下所示:

SELECT * 
FROM table
WHERE DateTimeOfInsert >= '2016-07-14 00:00:00' 
AND DateTimeOfInsert < '2016-07-16  00:00:00'

您需要更改DateTimeOfInert@JatinPatel,但为什么?当您只提供日期而不提供时间部分时,它将只匹配到一天的午夜。如果在午夜后有时间,它将忽略日期。刚刚实现。使用CastDateTimeOfInert作为日期。不过谢谢。与其将该列强制转换为最新状态,不如调整参数或固定值以包括一天结束前的时间。它的性能会更好point@JatinPatel我在听。CAST在性能方面更差?不总是这样,但当您将其应用于条件中使用的表列时,它可能无法有效地使用该列上的索引。@JatinPatel-CAST-date是请阅读我的问题。我已经解释了为什么不能使用BETWEEN。那么,你想忽略午夜前最后一秒发生的一切吗?非零毫秒值。这就是为什么大多数人建议不要使用介于和使用DateTimeOfInert>'2016-07-14 00:00:00'独占应为DateTimeOfInert>='2016-07-14 00:00:00'包含在内,但结束条件是正确的。
DateTimeOfInsert <= '20160716'
SELECT * 
FROM table
WHERE DateTimeOfInsert >= '2016-07-14 00:00:00' 
AND DateTimeOfInsert < '2016-07-16  00:00:00'