簡體   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