我有一个带有date_of_birth字段的MySQL数据库。存储在此字段中的数据格式为:MM-DD-YYYY。我需要计算此字段的年龄,因此我必须比较并采用CurDate()
的差异。
为此,我写了以下内容:
select FLOOR((DATE_FORMAT(curdate(), '%m-%d-%Y') - date_of_birth)/10000)
from patients
所以我希望它能比较MM-DD-YYYY的CurDate()
减去MM-DD-YYYY的DOB。但是,对于我的一个测试用例,它继续返回-1。我用MSSQL工作得很好但是看起来MySQL有点挑剔/用户友好。
我在这里遗漏了什么吗?什么是交易,请帮助!
由于
答案 0 :(得分:4)
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(date_of_birth, '%Y') -
(DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d'))
AS age
FROM patients
http://ma.tt/2003/12/calculate-age-in-mysql/
ps:如果您的日期是另一种格式(但我建议您保留'原生'格式YYYY-MM-DD),那么
SELECT
DATE_FORMAT(NOW(), '%Y') -
DATE_FORMAT(STR_TO_DATE(date_of_birth, '%m-%d-%Y'), '%Y')
- (DATE_FORMAT(NOW(), '00-%m-%d') <
DATE_FORMAT(STR_TO_DATE(date_of_birth, '%m-%d-%Y'), '00-%m-%d'))
AS age
FROM patients
答案 1 :(得分:2)
您可以使用datediff()
SELECT DATEDIFF(CURDATE(),date_of_birth) AS Age