mysql如何按年龄选择记录条件

时间:2012-12-12 08:40:23

标签: php mysql sql

我正在使用一个查询,我需要从年龄介于(多个年龄段)

之间的用户中选择行

就像我在3个字段的表用户中有3个用户:

ID | NAME | DOB

1 | A | 1980年12月6日
2 | B | 1970年12月6日
3 | C | 1990年12月6日
4 | D | 1995年12月6日
5 | E | 1985年12月6日

现在,如果我想要25岁以下的用户列表

NAME |出生日期

C | 1990年12月6日
D | 1995年12月6日

对于这个想法有什么看法?

SELECT * FROM users WHERE DOB 

? 任何想法

4 个答案:

答案 0 :(得分:9)

试试这个::

SELECT * FROM users WHERE DATEDIFF(CURDATE(), DOB)/365<25 

要获得多年的年龄:

SELECT 
FLOOR(tempUsers.t/365) as `years`
tempUsers.t%365 as `months`
from
(
 SELECT DATEDIFF(CURDATE(), DOB) t FROM users 
) tempUsers

答案 1 :(得分:2)

select *
from users
where DOB >= ADDDATE(CURRENT_DATE(), INTERVAL -25 YEAR);

答案 2 :(得分:2)

你可以这样做:

SELECT * FROM users WHERE DOB >= (CURDATE() - INTERVAL 25 YEAR)

要从dateofbirth日期字段计算上述25中的查询,它将如下所示:

SELECT * FROM users 
WHERE DOB >= (CURDATE() - INTERVAL FLOOR(DATEDIFF(CURDATE(),dateofbirth)/365) YEAR)

答案 3 :(得分:0)

我会用这个:

select id, name, dob,
  date_format(curdate(), '%Y') - date_format(dob, '%Y') - 
  (date_format(curdate(), '00-%m-%d') < date_format(dob, '00-%m-%d')) as age
from users

它比除以365更精确,例如。这给了2001年的错误:

SELECT floor(DATEDIFF('4012-12-12', '2012-12-12')/365)

虽然这给了2000这是正确的:

select
  date_format('4012-12-12', '%Y') - date_format('2012-12-12', '%Y') - 
  (date_format('4012-12-12', '00-%m-%d') < date_format('2012-12-12', '00-%m-%d'))

但是,如果你只需要计算一个年龄,那么两种解决方案都应该有效。