我正在尝试从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;
答案 0 :(得分: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;
答案 1 :(得分: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天)的所有诵读者。
答案 2 :(得分: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上进行操作,因为索引可能会使用它