2016-11-25 22 views
0

我想存儲給定表的日期間隔值,假設開始日期爲2016年7月1日,結束日期爲2017年6月30日。最簡單的方法是將值設置爲(in SQL Server日期時間值2016年7月1日存儲爲01/07/2016 00:00:00)。然後,當我想驗證如果某一日期是該間隔的範圍內,我會只使用BETWEEN子句,例如:我應該如何在SQL Server中存儲和驗證日期間隔?

WHERE this_date BETWEEN start_date AND end_date 

然而,如果this_date被設置爲值30/06/2017 10:00:00,以上聲明將返回false。爲了解決這個問題,我想我會在WHERE子句改成這樣:

WHERE this_date BETWEEN start_date AND dateadd(ss, -1, datead(dd,1,end_date)) 

這樣,END_DATE值將被設置爲30/06/2017 23:59:59和SQL子句將返回true。

解決此問題的另一種方法是隻存儲包含時間簽名的end_date值,即30/06/2017 23:59:59。這樣,WHERE子句不需要改變,語句將返回true。

我傾向於第二種方法,但希望聽到您的意見。你會說第二種方法更自然嗎?有沒有這種情況下,這不會是有利的?如果我使用第一種方法,是否有更好的方法來驗證日期間隔?

您的意見非常感謝!

+0

而不是在日期範圍內保存'2017-07-30 00:00:00',你能節省'2017-07-30 23:59:59'嗎?對不起,我只是意識到你的第二個aproach ....是這樣的,所以你不必在每個查詢計算。 –

回答

0

您需要使用存儲過程來滿足喜歡你的需求:

if(date>thisdate) 
your query here; 
else 
another query here; 

定的邏輯;