6

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

4 回答 4

18

您可以使用WHERE子句来过滤数据:

select name, age, job, gender
from hello
where age >=20
  and age <=30
  and gender = 'm'

请参阅带有演示的 SQL Fiddle

这也可以写成BETWEEN

select name, age, job, gender
from hello
where age between 20 and 30
  and gender = 'm'

请参阅SQL Fiddle with Demo

通常,您会希望存储出生日期而不是age一个人的出生日期,然后可以在需要时计算年龄。

于 2013-03-22T15:24:29.730 回答
13
SELECT name
FROM hello
WHERE age BETWEEN 20 AND 30
  AND gender = 'm'

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

于 2013-03-22T15:25:09.260 回答
0

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

于 2013-03-22T15:25:11.360 回答
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

于 2013-03-22T16:40:20.993 回答