declare @datestart datetime,@dateend datetime set @datestart='2004-09-20' set @dateend='2008-09-19'select case when datepart(mm,@datestart)<datepart(mm,@dateend) then datediff(year,@datestart,@dateend)-1 when datepart(mm,@datestart)=datepart(mm,@dateend) and datepart(dd,@datestart)>datepart(dd,@dateend) then datediff(year,@datestart,@dateend)-1 else datediff(year,@datestart,@dateend) end as [year]year 3
go
select datediff(year,'2004-12-31','2008-01-01')
go
--是两个年相减 2008-2004=4
select datediff(year,'2004-09-20','2008-09-18')
--结果4
为什么返回的是4而不是3?
--
函数的格式:
DATEDIFF ( datepart , startdate , enddate )函数的参数:
datepart
指定应在日期的哪一部分计算差额的参数。
startdate
计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
enddate
计算的结束日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。返回的类型为integer其实这个函数的执行过程是这样的,根据datepart取startdate的“datepart”值,根据datepart取enddate 的“datepart”值
二者相减得到最终结果
select datediff(year, '2007-12-31', '2008-01-01')
--------------------
3.997260
(影響 1 個資料列)select datediff(year,'2004-09-20','2008-09-18') 这样只计算年份值。
set @datestart='2004-09-20'
set @dateend='2008-09-19'select
case when datepart(mm,@datestart)<datepart(mm,@dateend)
then datediff(year,@datestart,@dateend)-1
when datepart(mm,@datestart)=datepart(mm,@dateend)
and datepart(dd,@datestart)>datepart(dd,@dateend)
then datediff(year,@datestart,@dateend)-1
else datediff(year,@datestart,@dateend)
end as [year]year
3