我在mysql中有一个表,其中出生日期列保存为unix时间戳(bigint)。
我想写这样的查询:
SELECT ... as `age` FROM `tableName`
和
SELECT * FROM `tableName` WHERE ... > 30
当3个点是从出生日算起年龄的函数。
我知道函数TIMESTAMPDIFF
,但如果我将出生日期保存为unix时间戳,那就不好了。
我该怎么办?
由于
答案 0 :(得分:4)
从MySQL的date and time functions,我们可以合并TIMESTAMPDIFF
,NOW
和FROM_UNIXTIME
。
假设dob
是表示出生日期的Unix时间戳:
TIMESTAMPDIFF(YEAR, FROM_UNIXTIME(dob), NOW())
从那里开始,根据列值添加WHERE
子句非常简单。
答案 1 :(得分:1)
SELECT FLOOR((unix_timestamp() - birthday)/(86400*365)) AS age FROM table;
答案 2 :(得分:0)
您可以分别使用YEAR和MONTH函数获取时间戳的年份和月份:
SELECT from_unixtime(birthdate),FLOOR((YEAR(CURDATE())*12+MONTH(CURDATE()) -(YEAR(from_unixtime(birthdate))*12+MONTH(from_unixtime(birthdate)))) / 12) as age FROM `table1`
这里是sqlfiddle
答案 3 :(得分:0)
使用PERIOD_DIFF并让MySQL处理闰年和其他时间的差异。你说年龄,所以我假设年/月足够好。
select period_diff(from_unixtime(1196440219, "%Y%m"), from_unixtime(1099440219, "%Y%m"))
返回36个月;
转换为年份的简单练习:)
还可以使用timestampdiff。需要对unix时间戳进行相同的样式解析
select timestampdiff(YEAR, from_unixtime(1099440219, "%Y-%m-%d"), from_unixtime(1196440219, "%Y-%m-%d"))
谢谢!