2012-05-17 81 views
1

我試圖獲取剩餘的天數,直到帳戶過期,以便我可以向用戶發送通知他們的電子郵件。我有正確的「Where」聲明,但我不確定如何選擇差異作爲整數。 到目前爲止,我有:計算給定日期和current_timestamp之間的天數

SELECT (DATE_EXPIRE-CURRENT_TIMESTAMP),EMAIL 
FROM [myTable] 
WHERE (DATE_EXPIRE - CURRENT_TIMESTAMP <= 10) AND (DATE_EXPIRE - CURRENT_TIMESTAMP >= 1) 

回答

3
SELECT DATEDIFF(DAY, CURRENT_TIMESTAMP, DATE_EXPIRE),EMAIL 
FROM dbo.[myTable] 
WHERE DATEDIFF(DAY, CURRENT_TIMESTAMP, DATE_EXPIRE) BETWEEN 1 AND 10; 

一個在那裏我居然主張使用的一些情況。雖然我還是比較喜歡設置明確的界限:

DECLARE @tomorrow DATE = DATEADD(DAY, 1, CURRENT_TIMESTAMP); 

SELECT DATEDIFF(DAY, CURRENT_TIMESTAMP, DATE_EXPIRE),EMAIL 
FROM dbo.[myTable] 
WHERE DATE_EXPIRE >= @tomorrow 
AND DATE_EXPIRE < DATEADD(DAY, 10, @tomorrow); 

你不應該使用速記數學(如datetime - integer),因爲,雖然與DATETIME/SMALLDATETIME工作,它如果更改數據類型爲DATE打破, DATETIME2等

對於很多我漫無頭緒的日期範圍查詢:

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx

+1

@JonathanDavis不急於,一個更好的答案可能會一起走。 –

相關問題