2014-09-27 108 views
1

我有一个简单的MYSQL表,我用数据类型日期存储生日。行数:MYSQL根据年龄选择生日

birthday 
-------- 
1989-09-08 

我想选择年龄25岁的用户。我用下面的查询:

SELECT birthday FROM `users` WHERE birthday >= now() - INTERVAL 25 YEAR; 

这将返回上面的行,但因为这个生日是25年以上,并低于26年里,MySQL是没有返回它。当我选择时返回INTERVAL 26 YEAR

是否有更正确的查询可供使用?

+1

尝试生日> = date_sub(curdate(),interval 25年) – 2014-09-27 16:31:50

回答

3

你有反向比较。你想:

WHERE birthday <= now() - INTERVAL 25 YEAR; 

对于一个范围,使用方法:

WHERE birthday <= now() - INTERVAL 18 YEAR and 
     birthday > now() - INTERVAL 26 YEAR 
+0

我如何选择18年到25年的范围?我尝试了范围,但它导致相同的问题 – 2014-09-27 17:49:55

+0

您将在上述查询中将“25”替换为“18”。 – 2014-09-27 19:48:30

1

对于范围还利用之间,把最早的日期第一

WHERE birthday BETWEEN 
    CURRENT_DATE - INTERVAL 26 YEAR + INTERVAL 1 DAY 
    AND CURRENT_DATE - INTERVAL 18 YEAR 

的另一种方式,但不建议大数据

WHERE TIMESTAMPDIFF(YEAR, birthday) BETWEEN 18 AND 25