2012-10-11 41 views
2

我試圖檢查兩個給定日期之間的優惠券是否有效。
我沒有太多的SQL經驗,但目前代碼使用BETWEEN來嘗試驗證,我遇到的問題是endDate在前一天的午夜過期(例如,10/12/2012 00:00:00.000評估爲10/11的午夜),而我需要延長至10/12的午夜。
所以我想知道如果在結束日期附加/添加23:59:59是執行此評估的最佳方式嗎?如何驗證兩個日期之間的DATETIME

目前正在使用:

ca.CreateDate between co.StartDate and co.EndDate 
+1

什麼是你的RDBMS? – Parado

回答

5

不連續變化值,用BETWEEN

你需要......

ca.CreateDate >= co.StartDate 
AND ca.CreateDate < co.EndDate 

但你也需要有一天添加到您的結束日期值。無論是在代碼co.EndDate + 1或相似),或在它自己的數據。

例如,如果你希望所有的時間在2012年的第一個星期...

WHERE 
     theDateTime >= '01 Jan 2012' 
    AND theDateTime < '08 Jan 2012' 

這甚至適用於粒度的其他水平。

-- First 12 hours of the day 
WHERE 
     theDateTime >= '01 Jan 2012 00:00' 
    AND theDateTime < '01 Jan 2012 12:00' 

-- All of Jan 
WHERE 
     theDateTime >= '01 Jan 2012' 
    AND theDateTime < '01 Feb 2012' 
+0

謝謝你只是想知道你的解決方案的好處,而不是介於兩者之間,所以我可以學習 –

+1

@AndrewBrower - 「BETWEEN」對離散值(如整數)最有用。如果你在看整數,「1和7之間」是有意義的。但是你會爲浮筒寫'BETWEEN 1和7.99999999999'嗎?或者你會寫'> = 1 AND <8'?日期時間是連續變化的,而不是離散的,所以我不會推薦使用'BETWEEN'。 *(這也使整個月變得更簡單,以及其他附帶的好處。)* – MatBailie

+0

是的,我明白我的真正問題的語法

-1

如果是到結束日期的情況下..添加+1會怎麼做..

相關問題