2011-04-08 396 views
4

我在MySQL数据库表中有一个BirthDate列来存储用户的出生日期。现在我有两个字段的HTML/PHP形式(1. Age from 2. Age To)。如何通过MySQL查询使用BirthDate列获得年龄?

如果用户想要获得年龄在10年到20年之间的所有用户,是否可以使用BirthDate列进行MySQL查询。

感谢

+0

什么是出生日期字段的数据类型? – 2011-04-08 07:02:21

+0

@dorkitude:日期 – Awan 2011-04-08 07:04:11

回答

8

您的查询将类似于此:

SELECT * FROM your_table WHERE YEAR(CURDATE())-YEAR(BirthDate) BETWEEN 10 AND 20; 
+0

它看起来简单而完美。 – Awan 2011-04-08 11:17:05

+0

@soulkphp对于出生日期在当前日期之后的人不起作用。例如,如果某人出生于1986年11月30日,他将有25岁,而不是26岁,因为你的查询会计算它。 – 2012-07-27 06:56:49

+1

@RomainGuidoux我做了一个疯狂的假设,人们不能在未来出生:) – soulkphp 2012-09-14 17:25:23

5
select * from table where 
(year(curdate())-year(dob))-(right(curdate(),5)< right(dob,5)) 
between 10 and 20 
8

你可以得到这样

SELECT column1, column2, 
    DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(dob)), '%Y') + 0 as age  
WHERE age >10 AND age <20 ; 
+0

这应该是选定的答案。这将年龄推迟到今年的一天。 – James 2015-04-15 19:23:13

2

,检查的年份和月份另一种解决方案:

SELECT * FROM yourTable WHERE FLOOR(DATEDIFF(curdate(), birthdate)/365.25) BETWEEN 10 AND 20 
0

它也可以通过使用子查询achived:

select * 
    from (select *, TIMESTAMPDIFF(YEAR, birthday, NOW()) as age from table_name) as sub_query 
    where age between 10 AND 20