1

ExpiryDateフィールドがちょうど 1 か月離れているテーブルからすべてのレコードを取得しようとしています。

ただし、問題はExpiryDate、時、分、秒とともに保存されることです。したがって、どのように言えばよいでしょうか - ExpiryDate (dd/MM/yyyy) が現在 (dd/MM/yyyy) の 1 か月前のすべてのレコードをテーブルから取得してください。

これは私が現在持っているものです:

SELECT *    FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE       mt.ExpiryDate = DATEADD(MONTH, 1, GETDATE())
AND         mt.IsComplete = 1;
4

3 に答える 3

1

これを試して:

SELECT *    FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE       convert(varchar, mt.ExpiryDate, 102) = convert(varchar, DATEADD(MONTH, 1, GETDATE()),102)
AND         mt.IsComplete = 1;
于 2013-04-16T10:27:35.037 に答える
1

次のようなバッファ時間が必要です

SELECT *    FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE       mt.ExpiryDate < DATEADD(MONTH, 1, GETDATE())
AND         mt.ExpiryDate > DATEADD(DAY, -1, DATEADD(MONTH, 1, GETDATE()))
AND         mt.IsComplete = 1;

これにより、1 か月先から (1 か月 - 1 日) 先までの間に有効期限が切れたすべてのレコードが取得されます。

于 2013-04-16T10:29:19.070 に答える
1
SELECT *    FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE       mt.ExpiryDate >= DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(MONTH, 1, GETDATE())), 0)
AND         mt.ExpiryDate < DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(MONTH, 1, GETDATE()) + 1), 0)
AND         mt.IsComplete = 1;

インデックスで使用される可能性があるため、ExpiryDate で操作を行いませんでした

于 2013-04-16T10:32:05.223 に答える