【问题标题】:how SELECT people within age range [duplicate]如何选择年龄范围内的人[重复]
【发布时间】:2013-12-16 01:20:26
【问题描述】:

我已经尝试了所有其他问题/解决方案,但没有答案。所以这里是:我需要SELECT * FROM people WHERE(dob 是 18 到 40)

但我的出生日期存储为 DATE 类型 YYYY-MM-DD

例如需要选择 18 到 40 岁之间的人!

【问题讨论】:

  • 如果你知道某人的出生日期,你如何计算他的年龄?

标签: mysql select pdo


【解决方案1】:

您需要使用BETWEEN 和一些年份计算TIMESTAMPDIFF(YEAR,'1980-02-04',NOW())

SELECT * FROM people WHERE TIMESTAMPDIFF(YEAR,`dob`,NOW()) BETWEEN  18 AND 40

See fiddle here

TIMESTAMPDIFF

YEAR(date)

【讨论】:

  • +1 这是最简单的方法,但是你没有在里面使用 YEAR(date) 函数,为什么要把那个链接放在那里?
  • 只要是 mysql 5.0+ 就可以了。
  • @FilipeSilva 我想要年份的差异所以如果你在这里看到一个例子dev.mysql.com/doc/refman/5.5/en/…
  • @gillyspy 是的,取自 mysql 5.5 手册
  • 非常感谢!它奏效了
【解决方案2】:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

【讨论】:

    【解决方案3】:

    你必须从今天算起 40 年前,从今天算起 18 年前。假设它是1940-01-011980-01-01,那么它将是:

    WHERE dob BETWEEN '1940-01-01' AND '1980-01-01';

    【讨论】:

      【解决方案4】:

      由于我不知道您使用的 SQL 方言,所以我采用完整的变体

      因为age 是现在 - 出生(!)

      select * from people where
          current date - date(birth) > MINAGE
          and
          current date - date(birth) < MAXAGE
      

      current date 取决于您使用的 SQL

      【讨论】:

        【解决方案5】:

        因为年龄是相对于今天的:

        select * from people where 
        date_sub(curdate(), interval 40 year)  =< dob
        and date_sub(curdate(), interval 18 year) >= dob
        

        这适用于任何版本的mysql

        【讨论】:

          猜你喜欢
          • 2012-07-10
          • 1970-01-01
          • 2017-04-09
          • 2022-10-04
          • 1970-01-01
          • 1970-01-01
          • 2021-10-22
          • 2015-04-14
          • 2015-07-17
          相关资源
          最近更新 更多