繁体   English   中英

日期(年,月,日)的匹配值,但时间不匹配

[英]Matching value on date (year, month, day) but not time

此答案中 ,建议整天使用以下语法与给定日期进行匹配。

select * from Info
  where DateColumn 
    between '2014-08-25 00:00:00' 
    and '2014-08-25 23:59:59'

除了我们错过了每天的最后一秒,这实际上不是一个大问题,但主要可能是一个破坏交易的事实,我不明白为什么不使用下面的简单表达式。

匹配是在半开放时间间隔内完成的,上限是互斥的(即fromAndInclusive <= date <toButNotInclusive ),并且没有指定任何时间的日期被假定为午夜(即00:00:00.000)。

select * from Info
  where DateColumn 
    between '2014-08-25' and '2014-08-26'

请注意,在SQL方面,我甚至还没有声称自己具备任何能力,因此,这个问题不应被视为指出任何错误。 否则我很自大,但是当涉及到DB时,我一直感到一两次卑鄙。 :)

两者都将返回不正确的结果。

包容两个端头,这样你的第一个查询

select * from Info
  where DateColumn 
  between '2014-08-25 00:00:00' 
  and '2014-08-25 23:59:59'

如您所指出的,它将在2014-08-25的最后一秒忽略任何内容。

您提出的第二个查询过于贪婪。 它将在26号午夜正好包含任何内容,即2014-08-26 00:00:00

select * from Info
  where DateColumn 
  between '2014-08-25' and '2014-08-26'

为了获得所需的结果,您应该使用>=< (如@Lamak)在注释中指出:

select * from Info
  where DateColumn >= '2014-08-25' and DateColumn < '2014-08-26'.

鉴于表中的以下数据:

2014-08-25 23:59:59
2014-08-25 23:59:59.500
2014-08-26 00:00:00
2014-08-26 00:00:00.500
2014-08-26 00:00:01

第一个查询仅匹配:

2014-08-25 23:59:59.000

第二场比赛:

2014-08-25 23:59:59.000
2014-08-25 23:59:59.500
2014-08-26 00:00:00.000 --this is wrong!

最后第三个(正确)匹配:

2014-08-25 23:59:59.000
2014-08-25 23:59:59.500
select * from Info
  where DateColumn >='2014-08-25 00:00:00' 
    and datecolumn<='2014-08-25 23:59:59'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM