[英]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.