How to get an age from a D.O.B field in MySQL?

后端 未结 13 1549
鱼传尺愫
鱼传尺愫 2020-11-29 07:01

I need to calculate the age of a \"customer\" from their date of birth.

I have tried to use the following:

DATEDIFF(year, customer.dob, \"2010

13条回答
  •  醉话见心
    2020-11-29 07:43

    Depends on your needs - int and float functions provided.
    - Your business rules may differ so adjust accordingly

    DROP FUNCTION IF EXISTS `age`; 
    CREATE FUNCTION `age` (
      `pdate_begin` DATE,
      `pdate_end` DATETIME
    ) RETURNS INT(11) UNSIGNED   
    COMMENT 'Calc age between two dates as INT' 
    DETERMINISTIC NO SQL SQL SECURITY DEFINER
    RETURN floor(datediff(pdate_end, pdate_begin) / 365.25) ;
    
    DROP FUNCTION IF EXISTS `age_strict`; 
    CREATE FUNCTION `age_strict` (
      `pdate_begin` DATE,
      `pdate_end` DATETIME
    ) RETURNS decimal(10,4)
    COMMENT 'Calc age between two dates as DECIMAL .4' 
    DETERMINISTIC NO SQL SQL SECURITY DEFINER
    RETURN round(datediff(pdate_end, pdate_begin) / 365.25, 4) ;
    
    -- test harness
    select 
        age(dob, now())        as age_int,
        age_strict(dob, now()) as age_dec
        from customer 
        where dob is not null 
        order by age(dob,now()) desc;
    
    -- test results
    dob,                  age_int,            age_dec
    1981-01-01 00:00:00        33             33.9713
    1987-01-09 00:00:00        27             27.9507
    2014-11-25 00:00:00         0              0.0739
    

提交回复
热议问题