2

我正在使用一个查询,我需要从年龄介于(多个年龄)的用户中选择行

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

身份证 | 姓名 | 出生日期

1 | 一个 | 12-06-1980
2 | 乙| 12-06-1970
3 | C | 1990年 12
月 6 日 4 | D | 1995年 12
月 6 日 5 | E | 1985 年 12 月 6 日

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

姓名 | 出生日期

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

对于这个有什么想法的查询应该是什么?

SELECT * FROM users WHERE DOB 

? 任何的想法

4

4 回答 4

10

试试这个 ::

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
于 2012-12-12T08:42:37.757 回答
2
select *
from users
where DOB >= ADDDATE(CURRENT_DATE(), INTERVAL -25 YEAR);
于 2012-12-12T08:43:32.750 回答
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)
于 2012-12-12T08:45:24.967 回答
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'))

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

于 2012-12-12T09:44:41.557 回答