我有一个带有表(USERS)的MySQL数据库,它存储了很多用户信息,包括以下列:
dob_day,dob_month,dob_year
我需要获得用户的年龄(确切年龄,而不仅仅是使用年份)。
此查询将与带有两个下拉列表的搜索框结合使用,用户选择low_are和high_age并将其与上面计算的年龄进行比较。
(users_age> = $ low_age AND users_age< = $ high_age)
对此的任何帮助都会很棒。 感谢。
答案 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。
您可以轻松修改上述查询,从表中提取其他用户字段。