0

enter image description hereSQL Server 2008中:查詢重疊日期

我有上表中,其中我需要得到NoteIndx符合今天的日期內搜索今天的日期。只是爲了測試,假設今天是2013年6月2日(2013年6月2日),這將得到兩個記錄與noteindx 93105和104044.

但這裏的正確值是104044,因爲我需要選擇一個具有STRTDATE和ENDDATE的最短日期範圍。

我正在嘗試各種sql查詢,但沒有得到正確的結果。

任何人都可以用盡可能最好的查詢來獲得上述結果嗎?

謝謝。

回答

2

這是你想要的嗎?

select top 1 n.* 
from notes n 
where cast('2013-06-02' as date) >= strtdate and 
     cast('2013-06-02' as date) < enddate + 1 
order by enddate - strtdate; 

這不使用between因爲你的日期存儲爲datetime - 這總是引入他們是在約會時間部分的可能性。

如果您想要今天的日期,請使用getdate()而不是cast('2013-06-02' as date)

+0

+1想補充說'BETWEEN'也可以用於日期比較。 – user2989408

+0

@ user2989408。 。 。之間會工作的日期不變(假設日期沒有時間組件)。它不適用於今天''enddate'''getdate()'。 –