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

后端 未结 9 915
离开以前
离开以前 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:36

    Check this page... http://www.sqlteam.com/article/datediff-function-demystified

    Create this functions:

    CREATE FUNCTION dbo.fnYearsApart
    (
            @FromDate DATETIME,
            @ToDate DATETIME
    )
    RETURNS INT
    AS
    BEGIN
            RETURN  CASE
                           WHEN @FromDate > @ToDate THEN NULL
                           WHEN DATEPART(day, @FromDate) > DATEPART(day, @ToDate) THEN DATEDIFF(month, @FromDate, @ToDate) - 1
                           ELSE DATEDIFF(month, @FromDate, @ToDate)
                   END / 12
    END
    

    and

    CREATE FUNCTION dbo.fnMonthsApart
    (
            @FromDate DATETIME,
            @ToDate DATETIME
    )
    RETURNS INT
    AS
    BEGIN
            RETURN  CASE
                           WHEN @FromDate > @ToDate THEN NULL
                           WHEN DATEPART(day, @FromDate) > DATEPART(day, @ToDate) THEN DATEDIFF(month, @FromDate, @ToDate) - 1
                           ELSE DATEDIFF(month, @FromDate, @ToDate)
                   END
    END
    

    and finally

    ALTER FUNCTION [dbo].[gatYMD](@dstart VARCHAR(50), @dend VARCHAR(50))
    RETURNS VARCHAR(50) AS
    BEGIN
        DECLARE @yy INT
        DECLARE @mm INT
        DECLARE @dd INT
        DECLARE @getmm INT
        DECLARE @getdd INT
    
        SET @yy = dbo.fnYearsApart(@dstart, @dend)  --DATEDIFF(yy, @dstart, @dend)
        SET @mm = dbo.fnMonthsApart(@dstart, @dend) --DATEDIFF(mm, @dstart, @dend)
        SET @dd = DATEDIFF(dd, @dstart, @dend)
        SET @getmm = ABS(DATEDIFF(mm, DATEADD(yy, @yy, @dstart), @dend))
        SET @getdd = ABS(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, @yy, @dstart), @dend), DATEADD(yy, @yy, @dstart)), @dend))
    
        RETURN (
          Convert(varchar(10),@yy) + ' años, ' + Convert(varchar(10),@getmm) + ' meses, '  + Convert(varchar(10),@getdd) + ' días'
        )
    END
    

    Greats!

提交回复
热议问题