mysql查询获得年龄25/04个月格式,日期格式是1988-04-04?

时间:2013-08-12 07:27:24

标签: mysql sql datetime-format

我在1988-04-04格式的mysql中有日期字段。我需要计算25/04个月格式的年龄。我试过这个:

SELECT CONCAT(
    FLOOR((curdate() - dob) / 31536000),
    'y ',
    FLOOR(MOD((curdate() - dob) / 31536000 * 12, 12)),
    'm'
) `age` from age

它给了我0/0个月。我会感激任何帮助。

2 个答案:

答案 0 :(得分:1)

在数字上下文中选择curdate()时,您会获得yyyymmdd值,例如20130812(今天,2013年8月12日)。这对日期计算来说并不是那么有用。

举例来说,我的生日(我的老屁)将是19650202。当你计算出今天和今天之间的数字差异时,你得到480610

现在,如果你将 除以31536000(不知道你从哪里得到),你肯定会得到零,尽管我是一个48岁的geezer : - )

使用datediff()来计算两个日期之间的天数差异,然后应用正确的除法和模数运算来获得整年和数月,你会好得多,比如(未经测试但是应该是一个好的开始):

select
    floor (100 * datediff (curdate(), dob) / 36525) as years,
    floor (mod (100 * datediff (curdate(), dob), 36525) / 100 / 30) as months
from age

这不会是完美,因为闰年​​的位置会对它产生一点影响,每年的实际天数为365.2425这个术语,我们假设每个月只有30天,但它应该准确到几天之内。

如果您想要更准确的度量,您需要找到或实现一些更精确的方程式来计算这些值。

这可能需要使用year()month()dob和当前日期中提取相关字段并减去这些字段,调整当前日期是否在生日之前在今年。

答案 1 :(得分:0)

按照paxdiablo的建议使用DATEDIFF:

SELECT
  FLOOR(DATEDIFF(CURDATE(), dob) / 365.25) AS years,
  FLOOR(MOD(DATEDIFF(CURDATE(), dob), 365.25) / (365.25 / 12)) AS months
FROM age