SQL 自每年指定日期以来的天数(SQL 服务器)
SQL for amount of days since specified date each year (SQL Server)
我正在尝试获取从当前日期算起自 4 月 15 日以来的天数,不包括年份,这样无论发生什么都不会超过 365
执行时:
SELECT DATEDIFF(dd, '04/15/2015', GETDATE())
它只会在今年起作用,并且需要让它在每年都起作用。
只需将当前年份弹出到您的查询中
SELECT DATEDIFF(dd, '04/15/'+ CAST(YEAR(GETDATE()) AS CHAR(4)), GETDATE())
您需要条件逻辑来处理当年 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)
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
您可以使用 "dy" 间隔获取 "today" 一年中到目前为止已经过去的天数。由于可能是闰年,获取 4 月 15 日的天数有点棘手。最好构造一个日期对象并要求 SQL 服务器为您将其解析为天数。
如果可以的话,我会避免在您的查询中使用日期字符串。字符串到日期的转换会花费您一些处理时间,如果涉及很多行,那么这些时间真的会加起来。此外,使用字符串会使您与该日期格式紧密结合。
如果您使用的是 SQL Server 2012 或更高版本:
SELECT DATEPART(dy, GETDATE()) - DATEPART(dy, DATEFROMPARTS(YEAR(GETDATE()), 4, 15));
对于 < SQL 服务器 2012:
SELECT DATEPART(dy, GETDATE())
- DATEPART(dy, DATEADD(dd, 14, DATEADD(mm, 3, DATEADD(yy, YEAR(GETDATE())-1900, 0))));
我正在尝试获取从当前日期算起自 4 月 15 日以来的天数,不包括年份,这样无论发生什么都不会超过 365
执行时:
SELECT DATEDIFF(dd, '04/15/2015', GETDATE())
它只会在今年起作用,并且需要让它在每年都起作用。
只需将当前年份弹出到您的查询中
SELECT DATEDIFF(dd, '04/15/'+ CAST(YEAR(GETDATE()) AS CHAR(4)), GETDATE())
您需要条件逻辑来处理当年 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)
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
您可以使用 "dy" 间隔获取 "today" 一年中到目前为止已经过去的天数。由于可能是闰年,获取 4 月 15 日的天数有点棘手。最好构造一个日期对象并要求 SQL 服务器为您将其解析为天数。
如果可以的话,我会避免在您的查询中使用日期字符串。字符串到日期的转换会花费您一些处理时间,如果涉及很多行,那么这些时间真的会加起来。此外,使用字符串会使您与该日期格式紧密结合。
如果您使用的是 SQL Server 2012 或更高版本:
SELECT DATEPART(dy, GETDATE()) - DATEPART(dy, DATEFROMPARTS(YEAR(GETDATE()), 4, 15));
对于 < SQL 服务器 2012:
SELECT DATEPART(dy, GETDATE())
- DATEPART(dy, DATEADD(dd, 14, DATEADD(mm, 3, DATEADD(yy, YEAR(GETDATE())-1900, 0))));