2012-05-17 52 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不急于,一个更好的答案可能会一起走。 –

相关问题