忽略年份的两个日期之间的差异

时间:2013-11-26 16:08:34

标签: sql date sql-server-2008-r2

我在数据库中有一个名为cutoffdate的日期字段。表名是Paydate。截止日期如下所示:

CutoffDate
-------------------------
2013-01-11 00:00:00.000
2013-02-11 00:00:00.000
2013-03-11 00:00:00.000
2013-04-11 00:00:00.000
2013-05-11 00:00:00.000
2013-06-11 00:00:00.000
2013-07-11 00:00:00.000
2013-08-11 00:00:00.000
2013-09-11 00:00:00.000
2013-10-11 00:00:00.000
2013-11-11 00:00:00.000
2013-12-11 00:00:00.000

我想将当前日期与截止日期(上述12个日期中的任何一个)进行比较,然后如果差异为2天,我需要继续进行。 这个截止日期将在明年和后年保持不变。所以我需要比较忽略年份部分的日期。例如,如果系统日期是2013-11-09,那么它应该是2天。此外,如果系统日期是2014-11-09,则它应显示为2天。怎么能实现这一目标?请帮忙

3 个答案:

答案 0 :(得分:0)

declare @difference int

set @difference = (SELECT ABS((MONTH(GETDATE())-MONTH(@date))*30+DAY(GETDATE())-DAY(@date)))

if(@difference>2)
begin
--Code goes here
end

简言之,下面的功能

DAY(date)

它将日期作为int返回。所以今天,DAY(GETDATE())返回26.

答案 1 :(得分:0)

看看DATEDIFF 试试这个..

SELECT 
     2 [Datediff]
FROM Paydate t
WHERE DATEDIFF(dd, GETDATE(), CONVERT(DATE, CONVERT(VARCHAR, DATEPART(dd, t.CutOffDate)) + '/' + 
      CONVERT(VARCHAR, DATEPART(mm, t.CutOffDate)) + '/' +  CONVERT(VARCHAR, DATEPART(yyyy, GETDATE())))) = 2

如果任何截止日期是从今天起的2天,则返回2,否则将不返回任何内容。
编辑:这是将日期转换为当前年份的强力方式,然后检查DATEDIFF是否返回2.

答案 2 :(得分:0)

尝试以下方法。它使用公用表表达式返回截止日期,但使用当前年份。完成后,查找之间的天数是一个简单的DATEDIFF操作。

;WITH normalizedCutoffs AS 
(
        SELECT CAST(STUFF(CONVERT(varchar, CutoffDate, 102), 1, 4, CAST(YEAR(GETDATE()) AS varchar)) AS datetime) AS CutoffDate 
)

SELECT CutoffDate, DATEDIFF(day, GETDATE(), CutoffDate) FROM normalizedCutoffs