1

我正在尝试从该ExpiryDate字段正好一个月后的表中获取所有记录。

然而,问题是它ExpiryDate与小时、分钟和秒一起存储。因此,我该怎么说 - 从我的表中获取所有记录,其中 ExpiryDate (dd/MM/yyyy) 比现在提前一个月 (dd/MM/yyyy)。

这是我目前拥有的:

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(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 回答
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 回答