试试这个:
DECLARE @stdate datetime,@eddate datetime
SET @stdate='2007-02-01'
SET @eddate='2012-03-03'
;WITH CTE as (
select DATEDIFF(yy,@stdate,convert(datetime,cast(DATEPART(year,@eddate) as varchar)+'-'+cast(DATEPART(month,@stdate) as varchar)+'-'+cast(DATEPART(dd,@stdate) as varchar))) yrs,
DATEDIFF(dd,convert(datetime,cast(DATEPART(year,@eddate) as varchar)+'-'+cast(DATEPART(month,@stdate) as varchar)+'-'+cast(DATEPART(dd,@stdate) as varchar)),@eddate) as dayss,
CAST(CASE WHEN DATEPART(dd,DATEADD(mm,datediff(mm,-1,(convert(datetime,cast(DATEPART(year,@eddate) as varchar)+'-'+cast(DATEPART(month,@stdate) as varchar)+'-'+cast(DATEPART(dd,@stdate) as varchar)))),-1)) = 29 then 366 else 365 end as float) as ydays
)
select yrs+dayss/cast(ydays as float) from CTE
你能告诉我到底要作为输出什么在你上面的例子中? – AnandPhadke 2012-08-09 07:18:31
也许这可能有所帮助:http://stackoverflow.com/questions/8882667/how-can-i-get-the-fraction-of-the-decimal-in-sql – Bridge 2012-08-09 07:29:20
但是应该如何定义“年份” (就我所知,这不是一个众所周知的术语)?基于具体日期,您可能需要考虑一年366天而不是365天。预计2011年3月1日至2012年2月29日的差额预计为多少? – 2012-08-09 07:31:09