MySQL日期问题 - 如何计算?

时间:2012-02-09 19:44:10

标签: mysql sql database

我有一个带有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有点挑剔/用户友好。

我在这里遗漏了什么吗?什么是交易,请帮助!

由于

2 个答案:

答案 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