2012-05-17 24 views
2

好的,我認爲我對SQL很好......我必須在兩個日期時間列之間進行比較。以不同的方式比較日期時間值

有人能解釋

DateA > DateB 

DateDiff(d,DateB,DateA) >= 1 

我認爲這兩個語句功能上等同,但我想我是錯的區別...

+1

你試戴比較差異? –

+0

一個很大的區別是第一個是[sargable](http://en.wikipedia.org/wiki/Sargable),第二個不是。不要在where子句中使用第二個表達式。如果你需要第二個表達式的功能,你應該重寫你的第一個查詢,像這樣:'cast(DateA as date)> cast(DateB as date)。 –

回答

4
DateA > DateB 

檢查DateA是否大於DateB(2012年12月12日14:50:01大於2012年12月12日14:50:00)。


DateDiff(d,DateB,DateA) >= 1 

檢查是否在天的差(日期部分d作爲第一個參數)是否等於或超過1天更大。

1

DateA如果是1分鐘或1秒或1毫秒後大於DateB。您的DateDiff正在尋找一整天的差價。

無論你是否打算,DateTime總是包含一個時間,所以你必須考慮到這一點。如果DateA甚至分數大於DateB(比方說1毫秒)

1

DateA > DateB將是真實的。

DateDiff(d,DateB,DateA) >= 1如果日期之間的差異爲一天或更多,則將爲真。

2

DateA > DateB如果DateA至少一毫秒比DateB大

如果DateB和DateA之間的差別至少一天

換句話說,如果你認爲

DateDiff(d,DateB,DateA) >= 1將評估真正將評估真今天在12:00比今天更大的在11:00與選擇一個

go如果你認爲一個日期午夜剛過比另一種更大的,有選擇走兩頭

+0

'比一天更大' - 我想你的意思是'至少有一天' –

+0

對我來說,有一天或更多似乎是一樣的。但感謝修正:) – Diego

+1

'大於一天'''1'不''= 1' –