zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

[Mysql] BETWEEN...AND...过滤数据

mysql数据 and ... 过滤 between
2023-09-11 14:22:53 时间

BETWEEN匹配范围中所有的值,包括指定的开始值和结束值,这些值可以是数值、文本或者日期

语法格式

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

练习案例数据1

DROP TABLE IF EXISTS purchase_info; 
CREATE TABLE purchase_info( 
commodity_id VARCHAR(8), 
category VARCHAR(16), 
colour VARCHAR(16),
purchase_quantity INT, 
purchase_date DATE 
) 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8; 
INSERT INTO 
purchase_info 
(commodity_id,category,colour,purchase_quantity,purchase_date) 
VALUE ('c001','clothing','black',150,'2022-04-25') 
,('c002','clothing','white',50,'2022-04-05') 
,('c003','shoes','white',500,'2022-03-23') 
,('c004','shoes','red',200,'2022-04-07') 
,('c005','clothing','blue',120,'2022-04-15');

purchase_info表 

问题1:查询采购日期在2022年4月1日到2020年4月30日(包括边界日期)的商品记录 

SELECT *
FROM purchase_info
WHERE purchase_date >= '2022-04-01'
AND purchase_date <= '2022-04-30';

上述代码可用BETWEEN关键字进行简化,代码如下所示:

SELECT *
FROM purchase_info
WHERE purchase_date BETWEEN '2022-04-01' AND '2022-04-30';

结果展示:

BETWEEN操作符,它需要两个值,即范围的开始值和结束值,可简化取值范围的书写,两端均包含(两个值必须用AND关键字分隔)

问题2:查询采购数量在100到200的商品记录

SELECT *
FROM purchase_info
WHERE purchase_quantity BETWEEN 100 AND 200;

结果展示: 

BETWEEN通常用于将取值限制在某个区间内,除了日期,还可以用于数值


注意:在使用BETWEEN时,需要注意的是,在查询精确到秒时,容易出现使用错误

练习案例数据2

DROP TABLE IF EXISTS purchase_time; 
CREATE TABLE purchase_time( 
commodity_id VARCHAR(8), 
purchase_date DATETIME 
) 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8; 
INSERT INTO 
purchase_time (commodity_id,purchase_date) 
VALUE ('c001','2022-04-25 14:13:38') 
,('c002','2022-04-05 09:12:03') 
,('c003','2022-03-23 18:00:19') 
,('c004','2022-04-30 12:23:01') 
,('c005','2022-05-01 08:12:41');

purchase_time表 

问题3:查询2022年4月10日到2022年4月30日的所有记录

SELECT *
FROM purchase_time
WHERE purchase_date BETWEEN '2022-04-10' AND '2022-04-30';

结果展示:

仔细观察原始数据表和查询结果,发现查询结果并不包含'2022-04-30 12:23:01'那条记录,因为BETWEEN的AND后连接的日期是限制到日的,则默认为00:00:00,所以这里右侧查询的边界值为'2022-04-30 00:00:00',即不包含12:23:01的那条记录

如果需要精确查询日期,则需要将上述代码修改为如下形式:

SELECT *
FROM purchase_time
WHERE purchase_date BETWEEN '2022-04-10 00:00:00' AND '2022-04-30 23:59:59';

结果展示:

WHERE purchase_date BETWEEN '2022-04-10 00:00:00' AND '2022-04-30 23:59:59'

将日期的查询精确到秒,即可查询到想要的结果