1

我正在尝试获取帐户到期前的剩余天数,以便我可以向我的用户发送一封电子邮件通知他们。我有正确的“Where”语句,但我不确定如何选择差异作为整数。到目前为止,我有:

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

1 回答 1

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

我真正提倡使用 BETWEEN 的少数情况之一。虽然我仍然更喜欢设置明确的界限:

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 等,它会中断。

对于我对日期范围查询的许多漫无边际:

于 2012-05-17T23:46:57.383 回答