【问题标题】:mysql how to select records where condition by agemysql如何按年龄选择条件的记录
【发布时间】:2012-12-12 08:40:22
【问题描述】:

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

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

ID |姓名 |出生日期

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

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

姓名 |出生日期

C | 12-06-1990
D | 12-06-1995

对此有什么想法?

SELECT * FROM users WHERE DOB 

? 任何想法

【问题讨论】:

标签: php mysql sql


【解决方案1】:

试试这个 ::

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

【讨论】:

  • 如果我不想指定年龄 25 怎么办?我希望它从出生日期列的查询中获取年龄?
【解决方案2】:
select *
from users
where DOB >= ADDDATE(CURRENT_DATE(), INTERVAL -25 YEAR);

【讨论】:

    【解决方案3】:

    你可以这样做:

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

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

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

    【讨论】:

    • 如果我不想指定年龄 25 怎么办?我希望它从出生日期列的查询中获取年龄?
    • 我已经更新了我的答案,并使用了一个从桌子上的 dateofbirth 字段计算年龄(上例中为“25”)的示例。
    • @Nelson:计算where中的天数差异不会提示返回年龄,需要将条件放在select子句中。
    【解决方案4】:

    我会用这个:

    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'))
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多