mysql 如何获取员工的出生日期和今天的日期之间的天数、月数和年数

toiithl6  于 2023-02-03  发布在  Mysql
关注(0)|答案(2)|浏览(224)

我试过这个,但如何计算闰年。

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;

有人能帮帮忙吗

chy5wohz

chy5wohz1#

例如:

SELECT @years := TIMESTAMPDIFF(YEAR, date_of_birth, CURRENT_DATE) years,
       @months := TIMESTAMPDIFF(MONTH, date_of_birth + INTERVAL @years YEAR, CURRENT_DATE) months,
       TIMESTAMPDIFF(MONTH, date_of_birth + INTERVAL @years YEAR + INTERVAL @months MONTH, CURRENT_DATE) days
FROM employees;

当然,您可以使用相应的表达式来代替UDV。
但是有一个问题。每个月的天数是不同的,所以年-月-天中的天数可能会根据计算方向而不同。我的查询将以前计算的年和月添加到date_of_birth,您可以创建类似的查询,从当前日期减去年和月..并且天数可能会不同。

mcvgt66p

mcvgt66p2#

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 |
+-------+--------+-------+

请参见www.example.comhttps://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_timestampdiff
回复您的评论:
如果MySQL的日期函数不能处理闰年,它们就毫无用处了,对吧?事实上,它们知道如何处理闰年。

mysql> select datediff(now(),'1980-01-30') as diff_with_leap_years;
+----------------------+
| diff_with_leap_years |
+----------------------+
|                15706 |
+----------------------+

mysql> select 365*43 as diff_without_leap_years;
+-------------------------+
| diff_without_leap_years |
+-------------------------+
|                   15695 |
+-------------------------+

因此,从1980年到今天有11个闰年(我写这篇文章的时间是2023年1月30日)。

相关问题