2011-08-08 50 views
0

我在設置查詢的日期邊界時遇到問題。在兩個日期之間找到記錄並且沒有其他條目

我想要2010年10月1日至2010年12月31日期間的記錄,但是在2011歷年內沒有記錄(活動)。

where INV.Date_Imported BETWEEN '10/1/2010' AND '12/31/2010' 
    AND INV.RecID NOT IN (
     SELECT RecID 
     FROM [VW_Invoice_All] 
     WHERE Date_Imported > '1/1/2011' 
    ) 
+3

而你在這裏的查詢不起作用,因爲......? – Nikki9696

+0

您正在使用哪種RDBMS?我不記得括號是否只是SQL Server的引用標識符,或者是否有任何其他使用它們的RDBMS。 –

+0

我正在使用sql服務器。 – NaveedAnjum

回答

2

我看到的唯一突出問題是您的Date_Imported行。如果你想2011/1/1被列入NOT IN查詢,您需要查詢更改爲

WHERE Date_Imported >= '1/1/2011' 

BETWEEN已經是包容性的,也就是你看起來是被哪個。

+0

我的查詢幾乎可以工作,但不是100%。我希望在2010年10月1日至2010年12月31日之間的數據,但不是在2011年。 – NaveedAnjum

+0

從你發佈的內容來看,你的查詢應該與我建議的修改一起工作。什麼不工作? – gtcompscientist

0

您的日期沒有任何時間,但如果它們是DATETIME列,那麼這可能很重要。我可能會使用:

WHERE 
    INV.Date_Imported >= '10/1/2010' AND 
    INV.Date_Imported < '1/1/2011' AND 
    NOT EXISTS (
     SELECT * 
     FROM [VW_Invoice_All] I2 
     WHERE 
      I2.RecID = INV.RecID AND 
      I2.Date_Imported >= '1/1/2011') 

(該EXISTS可能會給你比IN查詢性能更好,但測試兩個。)

0

由於gtcompscientist說:

之間已經包容.. 。

所以你只需要:

WHERE INV.Date_Imported BETWEEN '2010-10-01 00:00:00' AND '2010-12-31 23:59:59' 

爲避免任何疑問,使用YYYY-MM-DD HH:mm:ss格式意味着您不必擔心區域設置(英國日期爲DD-MM-YYYY,而US爲MM-DD- YYYY但YYYY-MM-DD格式在兩個地區的解釋是相同的)。

增加時間(HH:mm:ss)可確保包含2010-12-31的所有內容,即從00:00:00到23:59:59。

0

從我的經驗來看,最安全的日期格式是'yyyymmdd'。在我目前工作的銀行中,這是唯一可以在生產服務器和測試服務器上運行的格式。

相關問題