timestampdiff meses fechas entre ejemplos edad diferencia dias calcular aƱos mysql sql

meses - Calcular edad en MySQL(InnoDb)



timestampdiff mysql (13)

Dado que la pregunta se está etiquetando para mysql , tengo la siguiente implementación que me funciona y espero que existan alternativas similares para otros RDBMS. Aquí está el sql:

select YEAR(now()) - YEAR(dob) - ( DAYOFYEAR(now()) < DAYOFYEAR(dob) ) as age from table where ...

Si tengo una fecha de nacimiento de personas almacenada en una tabla con el formato dd-mm-yyyy y la resta de la fecha actual, ¿en qué formato se devuelve la fecha?

¿Cómo puedo usar este formato devuelto para calcular la edad de alguien?


Esta es la forma de calcular la edad en 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


Hay dos formas simples de hacer eso:

1-

select("users.birthdate", DB::raw("FLOOR(DATEDIFF(CURRENT_DATE, STR_TO_DATE(users.birthdate, ''%Y-%m-%d''))/365) AS age_way_one"),

2-

select("users.birthdate",DB::raw("(YEAR(CURDATE())-YEAR(users.birthdate)) AS age_way_two"))


Prefiero usar una función de esta manera.

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 ;

ahora para usar

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

O

SELECT F_AGE(date) AS age FROM table;


Prueba esto:

SET @birthday = CAST(''1980-05-01'' AS DATE); SET @today = CURRENT_DATE(); SELECT YEAR(@today) - YEAR(@birthday) - (CASE WHEN MONTH(@birthday) > MONTH(@today) OR (MONTH(@birthday) = MONTH(@today) AND DAY(@birthday) > DAY(@today)) THEN 1 ELSE 0 END);

Vuelve este año - año de nacimiento (cuántos años tendrá la persona este año después del cumpleaños) y se ajusta en función de si la persona ya tuvo el cumpleaños este año.

No sufre los errores de redondeo de otros métodos presentados aquí.

Adaptado libremente de here


Puede hacer una función para hacerlo:

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 ;

Ahora puede obtener la edad de una fecha:

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

Si la fecha está en formato Ymd H: i: s, puede hacer esto:

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

Puedes reutilizar esta función en cualquier lugar;)



Si el valor se almacena como un tipo de datos DATETIME:

SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob, 5)) as age FROM YOUR_TABLE

Menos preciso cuando se consideran años bisiestos:

SELECT DATEDIFF(CURRENT_DATE, STR_TO_DATE(t.birthday, ''%d-%m-%Y''))/365 AS ageInYears FROM YOUR_TABLE t


Simplemente hazlo

SELECT birthdate, (YEAR(CURDATE())-YEAR(birthdate)) AS age FROM `member`

fecha de nacimiento es el nombre del campo que guarda el nombre de la fecha de nacimiento toma CURDATE () cambia al año por AÑO () comando menos con AÑO () desde el campo de fecha de nacimiento


Simplemente:

DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`birthDate`)), ''%Y'')+0 AS age


SELECT TIMESTAMPDIFF (YEAR, YOUR_COLUMN, CURDATE()) FROM YOUR_TABLE AS AGE

Haga clic para demo ...

Simple pero elegante ..


select *,year(curdate())-year(dob) - (right(curdate(),5) < right(dob,5)) as age from your_table

de esta manera, considera incluso el mes y el día de nacimiento para tener un cálculo de edad más preciso.


select floor(datediff (now(), birthday)/365) as age