如何在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 如何根据一个表中的两个时间计算出时间差

在 SQL Server 2008 中计算到期日期

怎样通过计算机ip地址访问sql server 2008数据库

如何在SQL Server 2008 Express中更改sa密码?

SQL SERVER 2008如何卸载干净