[英]Get month from date time now month, Get year from date time now year and write specific day
[英]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.