如何选择年龄范围内的人[重复]

Posted

技术标签:

【中文标题】如何选择年龄范围内的人[重复]【英文标题】: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 岁之间的人!

【问题讨论】:

如果你知道某人的出生日期,你如何计算他的年龄? 【参考方案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

【讨论】:

以上是关于如何选择年龄范围内的人[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从特定小时范围内的行中选择最小值?

如何使用 LINQ 从列表中选择提供的索引范围内的值

如何在Javascript中选择对象内的数组内的字段[重复]

SQL如何从给定郊区5KM范围内的给定多个郊区中选择属性?

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]

MySQL:选择两个日期范围内的所有数据