【问题标题】:How to get Age using BirthDate column by MySQL query?如何通过 MySQL 查询使用 BirthDate 列获取年龄?
【发布时间】:2011-08-01 06:51:16
【问题描述】:

我在 MySQL 数据库表中有一个 BirthDate 列来存储用户的出生日期。现在我在 html/php 中有两个字段(1. Age From 2. Age To)。

如果用户想要获取年龄在 10 岁到 20 岁之间的所有用户,是否可以使用 MySQL 查询使用 BirthDate 列来做到这一点。

谢谢

【问题讨论】:

  • BirthDate 列的数据类型是什么?

标签: php mysql zend-framework date


【解决方案1】:

也可以通过子查询来实现:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您的查询将如下所示:

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

      【讨论】:

      • 它看起来简单而完美。
      • @soulkphp 它不适用于生日在当前日期之后的人。例如,如果某人出生于 1986 年 11 月 30 日,那么他将有 25 岁,而不是您的查询计算得出的 26 岁。
      • @RomainGuidoux 我做了一个疯狂的假设,即人们不能在未来出生:)
      • 老问题,我知道,但我认为@RomainGuidoux 的意思是,如果您专门寻找 9 岁的人,这将是(目前)2015 - 2006 年。但这也将如果他们在今年晚些时候出生,请给你找一个 8 岁的人。所以如果现在是四月,他们是九月出生的,即使他们只有 8 岁,他们仍然会出现。
      • 如果我的日期类型为 varchar "1990 年 3 月 1 日",这不起作用??
      【解决方案4】:

      你可以这样

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

      【讨论】:

      • 这应该是选择的答案。这样可以将年龄精确到当天,而不是一年。
      【解决方案5】:
      select * from table where
      (year(curdate())-year(dob))-(right(curdate(),5)< right(dob,5) )
      between 10 and 20
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 2015-05-22
        • 1970-01-01
        • 2022-01-19
        • 2011-02-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        相关资源
        最近更新 更多