【发布时间】:2013-09-12 06:07:21
【问题描述】:
我在 mysql 中使用 FROM_DAYS 函数时遇到问题,我想从 my_table 中获取年龄,这是我的查询;
select dob,CURRENT_DATE,
DATE_FORMAT(FROM_DAYS(DATEDIFF(CURRENT_DATE,dob)),'%y yr %c mth %e dy') AS age,
DATEDIFF(CURRENT_DATE,dob) days from my_table
结果:
dob || CURRENT_DATE || age || days ||
==========++==============++==================++=======++
1953-09-10|| 2013-09-12 || 60 yr 1 mth 3 dy || 21917 ||
2013-09-08|| 2013-09-12 || 00 yr 0 mth 0 dy || 4 ||
当我在第二行尝试FROM_DAYS(DATEDIFF(CURRENT_DATE,m.tgllahir)) 时,结果是0000-00-00
然后我尝试查看Date and Time Functions 并找到了这个
SELECT FROM_DAYS(730669);
-> '2007-07-03'
但是当我尝试时,这就是我得到的;
SELECT FROM_DAYS(730669);
-> '2000-07-03'
我很好奇为什么FROM_DAYS 功能不能正常工作,但我的主要问题是如何找到年龄?
编辑
在与 Barmar 讨论后,我知道我无法使用 FROM_DAYS 来获得准确的年龄,所以我试图找到不同的方法
【问题讨论】:
-
@asharajay 和我的查询基本相同
-
我认为这是文档中的错误。
730669/365.25 = 2000.46. -
FROM_DAYS(n)为所有n < 366返回0000-00-00。文档说 在旧日期谨慎使用 FROM_DAYS()。它不适用于公历 (1582) 出现之前的值 -
FROM_DAYS()将自 0 年以来的天数转换为日期。所以 366 是第 1 年 1 月的第一天,即 0001-01-01 - 日历中没有 00 月。我不知道为什么它在 0 年不起作用,但那一年是在 1582 年之前,所以文档说不要在这么旧的日期使用它。