如果我在一个表中以 dd-mm-yyyy 的格式存储了某个人的出生日期,并将其从当前日期中减去,那么返回的日期格式是什么?
我如何使用这个返回的格式来计算某人的年龄?
如果我在一个表中以 dd-mm-yyyy 的格式存储了某个人的出生日期,并将其从当前日期中减去,那么返回的日期格式是什么?
我如何使用这个返回的格式来计算某人的年龄?
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
函数:SELECT TIMESTAMPDIFF(YEAR, '1970-02-01', CURDATE()) AS age
SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob, 5)) as age
FROM YOUR_TABLE
考虑闰年时,精度较低:
SELECT DATEDIFF(CURRENT_DATE, STR_TO_DATE(t.birthday, '%d-%m-%Y'))/365 AS ageInYears
FROM YOUR_TABLE t
使用:
select *,year(curdate())-year(dob) - (right(curdate(),5) < right(dob,5)) as age from your_table
这样做可以考虑出生的月份和日期,以便进行更准确的年龄计算。
year(curdate())-year(dob) - (dayofyear(curdate()) < dayofyear(dob)) as age
来修复,我认为dayofyear更加优雅。 - regileroselect floor(datediff (now(), birthday)/365) as age
简单来说:
DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`birthDate`)), '%Y')+0 AS age
由于这个问题被标记为 mysql
,我有以下的实现方法,对我来说很管用,我希望其他关系型数据库也有类似的替代方案。以下是SQL语句:
select YEAR(now()) - YEAR(dob) - ( DAYOFYEAR(now()) < DAYOFYEAR(dob) ) as age
from table
where ...
试试这个:
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);
它返回今年-出生年份(人在生日后今年的年龄),并根据这个人今年是否已经过生日进行调整。
它不会受到其他方法所遇到的舍入误差的影响。
自此处自由改编
简单地做
SELECT birthdate, (YEAR(CURDATE())-YEAR(birthdate)) AS age FROM `member`
birthdate是一个字段名,用于保存出生日期。 使用YEAR()命令将CURDATE()转换为年份, 再从出生日期字段中减去该年份。
这是如何在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