如何在MySQL表中选择特定的值范围?

时间:2013-03-22 15:22:38

标签: mysql sql select

以下是我的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';

4 个答案:

答案 0 :(得分:14)

您可以使用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,然后可以在需要时计算年龄。

答案 1 :(得分:12)

SELECT name
FROM hello
WHERE age BETWEEN 20 AND 30
  AND gender = 'm'

不要存储age。存储日期字段并计算年龄。如果这个人变老会怎么样?

答案 2 :(得分:0)

SELECT * FROM hello WHERE age>=20 AND age <=30 AND gender='m';

答案 3 :(得分:0)

因为年龄会逐年变化,所以你可以这样做。

像这样设置表:

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