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 の使用を実際に推奨する数少ないケースの 1 つです。私はまだ明示的な境界を設定することを好みますが:

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 に答える