我在数据库中有一个名为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天。怎么能实现这一目标?请帮忙
答案 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