How to use DATEDIFF to return year, month and day?

后端 未结 9 906
离开以前
离开以前 2020-12-10 22:36

How can I use DATEDIFF to return the difference between two dates in years, months and days in SQL Server 2005

DATEDIFF (date , dat         


        
9条回答
  •  北海茫月
    2020-12-10 23:25

    CREATE FUNCTION FindDateDiff(@Date1 date,@Date2 date)
    RETURNS TABLE 
    AS
    RETURN 
    (
        SELECT
            CALC.Years,CALC.Months,D.Days,
            Result = RTRIM(Case When CALC.Years > 0 Then CONCAT(CALC.Years, ' year(s) ') Else '' End
                         + Case When CALC.Months > 0 Then CONCAT(CALC.Months, ' month(s) ') Else '' End
                         + Case When D.Days > 0 OR (CALC.Years=0 AND CALC.Months=0) Then CONCAT(D.Days, ' day(s)') Else '' End)
        FROM (VALUES(IIF(@Date1<@Date2,@Date1,@Date2),IIF(@Date1<@Date2,@Date2,@Date1))) T(StartDate, EndDate)
        CROSS APPLY(Select
            TempEndYear = Case When ISDATE(CONCAT(YEAR(T.EndDate), FORMAT(T.StartDate,'-MM-dd')))=1 Then CONCAT(YEAR(T.EndDate), FORMAT(T.StartDate,'-MM-dd'))
                            Else CONCAT(YEAR(T.EndDate),'-02-28') End
        ) TEY
        CROSS APPLY(Select EndYear = Case When TEY.TempEndYear > T.EndDate Then DATEADD(YEAR, -1, TEY.TempEndYear) Else TEY.TempEndYear End) EY
        CROSS APPLY(Select
            Years = DATEDIFF(YEAR,T.StartDate,EY.EndYear),
            Months = DATEDIFF(MONTH,EY.EndYear,T.EndDate)-IIF(DAY(EY.EndYear)>DAY(T.EndDate),1,0)
        ) CALC
        CROSS APPLY(Select Days =  DATEDIFF(DAY,DATEADD(MONTH,CALC.Months,DATEADD(YEAR,CALC.Years,T.StartDate)),T.EndDate)) D
    )
    

    and

    Select * From dbo.FindDateDiff('2015-12-15','2018-12-14')
    

    Result:

提交回复
热议问题