我试图获取自当前日期4月15日以来的天数,不包括年份,这样无论它从不超过365
执行此操作时:
SELECT DATEDIFF(dd, '04/15/2015', GETDATE())
它只适用于今年,需要让它每年都能运作。
答案 0 :(得分:1)
只需将当前年份弹出到您的查询中
SELECT DATEDIFF(dd, '04/15/'+ CAST(YEAR(GETDATE()) AS CHAR(4)), GETDATE())
答案 1 :(得分:0)
您需要条件逻辑来处理当年4月15日之前的日期:
SELECT (case when month(getdate()) > 4 or
month(getdate()) = 4 and day(getdate()) > 15
then DATEDIFF(day, cast(year(getdate()) as varchar(255)) + '-04-15', GETDATE())
else DATEDIFF(day, cast(year(getdate()) - 1 as varchar(255)) + '-04-15', GETDATE())
end)
答案 2 :(得分:0)
SELECT MIN(diff)
FROM ( VALUES
( DATEDIFF(day,DATEFROMPARTS(YEAR(GETDATE()) ,4,15),GETDATE()) )
,( DATEDIFF(day,DATEFROMPARTS(YEAR(GETDATE())-1,4,15),GETDATE()) )
) t(diff)
WHERE diff >= 0
答案 3 :(得分:0)
您可以使用" dy"获取今年迄今为止过去的天数的时间间隔为"今天"。由于闰年的潜力,获得4月15日的天数有点棘手。最好构造一个日期对象,并要求SQL Server为您解决它。
如果可以,我会避免在查询中使用日期字符串。字符串到目前为止的转换会花费您一些处理时间,如果涉及很多行,则可以真正加起来。此外,使用字符串会将您与日期格式紧密结合在一起。
如果您使用的是SQL Server 2012或更高版本:
SELECT DATEPART(dy, GETDATE()) - DATEPART(dy, DATEFROMPARTS(YEAR(GETDATE()), 4, 15));
对于< SQL Server 2012:
SELECT DATEPART(dy, GETDATE())
- DATEPART(dy, DATEADD(dd, 14, DATEADD(mm, 3, DATEADD(yy, YEAR(GETDATE())-1900, 0))));