MS SQL将日期转换为简短

时间:2013-04-16 10:22:57

标签: sql datetime

我正在尝试从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;

3 个答案:

答案 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上进行操作,因为索引可能会使用它