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'