如何在 MySQL 表中选择特定范围的值?
Posted
技术标签:
【中文标题】如何在 MySQL 表中选择特定范围的值?【英文标题】:How to select particular range of values in MySQL table? 【发布时间】:2013-03-22 15:22:38 【问题描述】:以下是我的 mysql 表。我想从我的表 hello
中选择特定范围的值。
name age job gender
A 33 dgfd m
b 44 gdfg f
c 21 jhkh m
e 23 etertr m
我如何选择年龄在 20-30 岁之间的男性。
SELECT hello.*
WHERE hello.age='20-30' AND hello.gender='m';
【问题讨论】:
Select rows with in particular range sql query的可能重复 我添加了一个年龄计算示例。 【参考方案1】:您可以使用WHERE
子句过滤数据:
select name, age, job, gender
from hello
where age >=20
and age <=30
and gender = 'm'
见SQL Fiddle with Demo
这也可以写成BETWEEN
:
select name, age, job, gender
from hello
where age between 20 and 30
and gender = 'm'
见SQL Fiddle with Demo。
通常您会希望存储出生日期而不是个人的age
,然后可以在需要时计算年龄。
【讨论】:
【参考方案2】:SELECT name
FROM hello
WHERE age BETWEEN 20 AND 30
AND gender = 'm'
不要存储age
。存储日期字段并计算年龄。如果这个人变老了会怎样?
【讨论】:
我想检查年龄和性别,而不是姓名。 @Ameer 对你想要c
和e
的声明感到困惑
@Ameer 如果您的问题要求发生变化,请提出新问题。
我已经包含了一个带有日期的示例来显示年龄计算,因此它会根据每年的年龄变化进行调整。【参考方案3】:
SELECT * FROM hello WHERE age>=20 AND age <=30 AND gender='m';
【讨论】:
【参考方案4】:因为年龄每年都在变化,所以您可以这样做。
这样设置表格:
delimiter $$
CREATE TABLE `hello` (
`name` varchar(45) NOT NULL,
`birthdate` date DEFAULT NULL,
`job` varchar(45) DEFAULT NULL,
`gender` enum('m','f') DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$
我正在使用的值:
'A', '1980-08-04', 'clerk', 'm'
'B', '1969-10-12', 'waitress', 'f'
'C', '1992-09-16', 'pilot', 'm'
'd', '1991-02-21', 'unemployed', 'm'
SQL 查询:
select name,TIMESTAMPDIFF(YEAR,birthdate,current_date) as age,job,gender from hello where birthdate > current_date - interval 30 YEAR and birthdate < current_date - interval 20 year;
返回的查询答案
name age job gender
C 20 pilot m
d 22 unemployed m
在此处添加到 SQLFiddle。 http://www.sqlfiddle.com/#!2/0143c/1/0
【讨论】:
以上是关于如何在 MySQL 表中选择特定范围的值?的主要内容,如果未能解决你的问题,请参考以下文章
我在表单中使用了日期范围选择器如何禁用从 MySQL 数据库中获取的特定日期范围