SELECT
FLOOR(DATEDIFF(NOW(), date_of_birth) / 365.25) as years,
FLOOR(MOD(DATEDIFF(NOW(), date_of_birth), 365.25) / 30.4375) as months,
MOD(DATEDIFF(NOW(), date_of_birth), 30.4375) as days
FROM employees;
mysql> insert into employees set name = 'Harry Potter', date_of_birth = '1980-07-31';
mysql> SELECT
TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS years,
TIMESTAMPDIFF(MONTH, date_of_birth, NOW()) AS months,
TIMESTAMPDIFF(DAY, date_of_birth, NOW()) AS days
FROM employees;
+-------+--------+-------+
| years | months | days |
+-------+--------+-------+
| 42 | 509 | 15523 |
+-------+--------+-------+
2条答案
按热度按时间chy5wohz1#
例如:
当然,您可以使用相应的表达式来代替UDV。
但是有一个问题。每个月的天数是不同的,所以年-月-天中的天数可能会根据计算方向而不同。我的查询将以前计算的年和月添加到
date_of_birth
,您可以创建类似的查询,从当前日期减去年和月..并且天数可能会不同。mcvgt66p2#
请参见www.example.comhttps://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_timestampdiff
回复您的评论:
如果MySQL的日期函数不能处理闰年,它们就毫无用处了,对吧?事实上,它们知道如何处理闰年。
因此,从1980年到今天有11个闰年(我写这篇文章的时间是2023年1月30日)。