比较MySQL中的生日和年龄

时间:2011-05-05 21:45:41

标签: php mysql

我有一个带有表(USERS)的MySQL数据库,它存储了很多用户信息,包括以下列:

  

dob_day,dob_month,dob_year

我需要获得用户的年龄(确切年龄,而不仅仅是使用年份)。

此查询将与带有两个下拉列表的搜索框结合使用,用户选择low_are和high_age并将其与上面计算的年龄进行比较。

  

(users_age> = $ low_age AND users_age< = $ high_age)

对此的任何帮助都会很棒。 感谢。

3 个答案:

答案 0 :(得分:0)

将生日放在dob_date中,以下选择应该有效。

SELECT year(curdate()) - year(dob_date) 
       + if((month(curdate() > month(dob_date)) 
             or (month(curdate()) = month(dob_date) 
                 and day(curdate()) >= day(dob_date)),1,0) as age from ...

如果我忘记'('或')',请不要杀了我,但这应该可以解决问题。

答案 1 :(得分:0)

您可以对日期进行字符串比较:

SELECT * FROM your_table
WHERE DATE_FORMAT(CONCAT_WS('-', dob_year, dob_month, dob_day), '%Y-%m-%d') >= '1950-01-01' 
AND   DATE_FORMAT(CONCAT_WS('-', dob_year, dob_month, dob_day), '%Y-%m-%d') <= '2005-12-31'

答案 2 :(得分:0)

如果您想保留您指定的结构,可以使用以下代码查询来选择这些用户:

SELECT (YEAR(CURDATE())-YEAR(a.dob) - (RIGHT(CURDATE(),5)<RIGHT(a.dob,5))) as 'age'  FROM (SELECT STR_TO_DATE(CONCAT(dob_day,',',dob_month,',',dob_year), '%d,%m,%Y') AS 'dob' FROM users) a WHERE  (YEAR(CURDATE())-YEAR(a.dob) - (RIGHT(CURDATE(),5)<RIGHT(a.dob,5))) BETWEEN $low_age AND $high_age

有关用于计算用户年龄的计算的详细信息,请参阅here

您可以轻松修改上述查询,从表中提取其他用户字段。