Рассчитать возраст в MySQL (InnoDb) - PullRequest
58 голосов
/ 25 апреля 2011

Если в таблице в форме dd-mm-yyyy хранится дата рождения человека, и я вычитаю ее из текущей даты, в каком формате возвращается дата?

Как я могу использовать этот возвращенный формат для подсчета чьего-либо возраста?

Ответы [ 13 ]

0 голосов
/ 15 февраля 2013

Я предпочитаю использовать функцию таким образом.

DELIMITER $$ DROP FUNCTION IF EXISTS `db`.`F_AGE` $$
    CREATE FUNCTION `F_AGE`(in_dob datetime) RETURNS int(11)
        NO SQL
    BEGIN
       DECLARE l_age INT;
       IF DATE_FORMAT(NOW(  ),'00-%m-%d') >= DATE_FORMAT(in_dob,'00-%m-%d') THEN
          -- This person has had a birthday this year
          SET l_age=DATE_FORMAT(NOW(  ),'%Y')-DATE_FORMAT(in_dob,'%Y');
        ELSE
          -- Yet to have a birthday this year
          SET l_age=DATE_FORMAT(NOW(  ),'%Y')-DATE_FORMAT(in_dob,'%Y')-1;
       END IF;
       RETURN(l_age);
    END $$

    DELIMITER ;

теперь использовать

SELECT F_AGE('1979-02-11') AS AGE; 

ИЛИ

SELECT F_AGE(date) AS age FROM table;
0 голосов
/ 26 сентября 2012

Вы можете сделать функцию для этого:

drop function if exists getIdade;

delimiter |

create function getIdade( data_nascimento datetime )
returns int
begin
    declare idade int;
    declare ano_atual int;
    declare mes_atual int;
    declare dia_atual int;
    declare ano int;
    declare mes int;
    declare dia int;

    set ano_atual = year(curdate());
    set mes_atual = month( curdate());
    set dia_atual = day( curdate());

    set ano = year( data_nascimento );
    set mes = month( data_nascimento );
    set dia = day( data_nascimento );

    set idade = ano_atual - ano;

    if( mes > mes_atual ) then
            set idade = idade - 1;
    end if;

    if( mes = mes_atual and dia > dia_atual ) then
            set idade = idade - 1;
    end if;

    return idade;
end|

delimiter ;

Теперь вы можете узнать возраст по дате:

select getIdade('1983-09-16');

Если ваша дата в формате Y-m-d H: i: s, вы можете сделать это:

select getIdade(substring_index('1983-09-16 23:43:01', ' ', 1));

Вы можете использовать эту функцию где угодно;)

0 голосов
/ 10 февраля 2012

Вот как рассчитать возраст в MySQL:

select
  date_format(now(), '%Y') - date_format(date_of_birth, '%Y') - 
  (date_format(now(), '00-%m-%d') < date_format(date_of_birth, '00-%m-%d'))
as age from table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...