How to calculate age in T-SQL with years, months, and days

后端 未结 24 1963
无人共我
无人共我 2020-11-22 05:42

What would be the best way to calculate someone\'s age in years, months, and days in T-SQL (SQL Server 2000)?

The datediff function doesn\'t handle year

24条回答
  •  不要未来只要你来
    2020-11-22 06:17

    I use this Function I modified (the Days part) From @Dane answer: https://stackoverflow.com/a/57720/2097023

    CREATE FUNCTION dbo.EdadAMD
        (
            @FECHA DATETIME
        )
        RETURNS NVARCHAR(10)
        AS
        BEGIN
            DECLARE
                @tmpdate DATETIME
              , @years   INT
              , @months  INT
              , @days    INT
              , @EdadAMD NVARCHAR(10);
    
            SELECT @tmpdate = @FECHA;
    
            SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) - CASE
                                              WHEN (MONTH(@FECHA) >    MONTH(GETDATE()))
                                                 OR (
                                                    MONTH(@FECHA) = MONTH(GETDATE())
                                              AND DAY(@FECHA) > DAY(GETDATE())
                                              ) THEN
                                                    1
                                                ELSE
                                                    0
                                        END;
        SELECT @tmpdate = DATEADD(yy, @years, @tmpdate);
        SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) - CASE
                                  WHEN DAY(@FECHA) > DAY(GETDATE()) THEN
                                                                1
                                                            ELSE
                                                                0
                                                        END;
        SELECT @tmpdate = DATEADD(m, @months, @tmpdate);
    
        IF MONTH(@FECHA) = MONTH(GETDATE())
           AND DAY(@FECHA) > DAY(GETDATE())
              SELECT @days = 
                DAY(EOMONTH(GETDATE(), -1)) - (DAY(@FECHA) - DAY(GETDATE()));
        ELSE
            SELECT @days = DATEDIFF(d, @tmpdate, GETDATE());
    
        SELECT @EdadAMD = CONCAT(@years, 'a', @months, 'm', @days, 'd');
    
        RETURN @EdadAMD;
    
    END; 
    GO
    

    It works pretty well.

提交回复
热议问题