如何在sql server 2008中计算一年中的天数
Posted
技术标签:
【中文标题】如何在sql server 2008中计算一年中的天数【英文标题】:how to calculate number of days in year in sql server 2008 【发布时间】:2015-08-03 06:22:03 【问题描述】:我想在 SQL Server 2008 Management Studio 中计算一年中的天数。
例如:
2016 年:366 2014 年:365【问题讨论】:
***.com/questions/17318586/… 【参考方案1】:你可以试试:
declare @y int;
set @y = 2014;
SELECT DATEDIFF(day, cast(@y as char(4)), cast(@y+1 as char(4))) Days
结果:
Days
365
2版本由评论:
declare @y int;
set @y = 2014;
SELECT DATEDIFF(day, cast(cast(@y as char(4)) as date), cast(cast(@y+1 as char(4)) as date)) DaysCnt
【讨论】:
明确声明数据类型长度更好(有时默认长度为 30,有时为 1:***.com/questions/1131499/…)。此外,您不需要 NVARCHAR,VARCHAR 应该可以解决问题。最后,如果您明确地转换为 DATE,那么以后可能需要进行故障排除(并理解代码)的人可能会更容易。例如:声明@Year INT = 2016; SELECT DATEDIFF(DAY, CAST(CAST(@Year AS CHAR(4)) AS DATE), CAST(CAST(@Year + 1 AS CHAR(4)) AS DATE)) AS Days_cnt;【参考方案2】:试试这个...
create function fn(@year varchar(20))
returns int
as
begin
declare @a int
select @a =DATEPART(dy,@year +'1231')
return @a
end
select dbo.fn('2014')--365
select dbo.fn('2016')--366
DEMO Fiddle
【讨论】:
【参考方案3】:这也有效:
begin
declare @y int
set @y=2014
select datepart(dayofyear,dateadd(day,-1,'1/1/'+convert(char(4),@y+1)))
end
我得到下一年的第一天,减去一天得到当年的最后一天,然后从中得到一年中的一天。
【讨论】:
【参考方案4】:对于 SQL 2012 及更高版本:
DECLARE @FromDateYear INT = YEAR(GETDATE());
SELECT DATEDIFF(DAY, DATEFROMPARTS(YEAR(@FromDateYear),1,1), DATEFROMPARTS(YEAR(@FromDateYear) + 1,1,1))
您可以简单地将 YEAR(GETDATE())
替换为您的年份值。
所有这一切都是在计算从今年 1 月 1 日到明年 1 月 1 日的天数。这将包括 2 月 29 日(如果它存在于当年)。
【讨论】:
以上是关于如何在sql server 2008中计算一年中的天数的主要内容,如果未能解决你的问题,请参考以下文章
在 MS SQL Server 2008 的 Pivot 中计算水平总计
SQL sever 2008 如何根据一个表中的两个时间计算出时间差
怎样通过计算机ip地址访问sql server 2008数据库