SQL表示自每年指定日期以来的天数(SQL Server)

时间:2015-04-20 16:56:00

标签: sql sql-server datediff

我试图获取自当前日期4月15日以来的天数,不包括年份,这样无论它从不超过365

执行此操作时:

SELECT DATEDIFF(dd, '04/15/2015', GETDATE())

它只适用于今年,需要让它每年都能运作。

4 个答案:

答案 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))));