我在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个月。我会感激任何帮助。
答案 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