2017-08-22 52 views
0

我希望有人能指出我做錯了什麼,因爲我不知道。這是我第一次使用DATEADD。我嘗試了+ 7,+ 8以防萬一,但沒有。我不知道我在做什麼錯。我只需要7天的記錄,而不是那些日子之間。SQL獲取7天內過期的記錄

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND A.EXPIRATION = DATEADD(DAY,7,GETDATE()) 

結果沒有最後AND語句打動了我:

ID   EMAIL   NUMBER   EXPIRATION 
530c [email protected]  C-0001 2017-08-29 00:00:00.000 

謝謝你在先進。

回答

3

在SQL Server中,GETDATE()(儘管它的名稱)有一個時間組件。所以,你需要將其刪除:

A.EXPIRATION = CONVERT(DATE, DATEADD(DAY, 7, GETDATE())) 
+0

謝謝兄弟。那樣做了!我不認爲我需要轉換,因爲在屬性中列說datetime中的數據類型。 – sergio089

0

我的猜測是,DATEADD不能接受的一天,第一個參數,因爲它使用縮略語(如一個月毫米),所以代碼應該是這樣的:

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND A.EXPIRATION = DATEADD(dd,7,GETDATE()) 

此外,由於getdate增加了時間到最後,我猜到期也有時間部分,因爲你可能只是增加了7天到當前日期,它永遠不會完全相同。你可以嘗試沒有這樣的時刻部分都轉換:

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND CONVERT(date, A.EXPIRATION) = CONVERT(date, DATEADD(dd,7,GETDATE())) 
+0

無需猜測,文檔顯示'日','d'或'dd'。 https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql –

+0

感謝您的文檔鏈接,我沒有時間搜索,因爲我在工作,只是在計算器周圍滾動'因爲我需要一些東西,並偶然發現這一點。 – MirzaS

0

試試這個:

SELECT A.ID 
      ,B.EMAIL 
      ,A.NUMBER 
      ,A.EXPIRATION 
     FROM vw_RECORD AS A 
     LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
     WHERE NUMBER LIKE 'C%' 
     AND DATEDIFF(DAY,A.EXPIRATION,GETDATE())=7