mysql中between的用法及说明
作者:有梦想的攻城狮
关于between的使用
between的介绍
日常sql查询过程中经常要筛选某个属性或某个表达式结果的某个范围内的数据,这个时候我们经常通过 > 或者 < 来进行筛选,有的时候再项目中由于 > 和 < 经常会和起始标志符冲突,所以需要进行转义,这个过程很容易出现一些问题,其实在sql的关键字中,有一个非常实用的关键字可以进行范围查询,这个关键字就是between,接下来我们就来深入的了解一下between的用法。
between的语法
between关键字是一个逻辑操作符用来筛选指定属性或表达式某一范围内或范围外的数据。
between关键字常用在where关键字后与select或update或delete共同使用。
between的使用语法如下:
expr [NOT] BETWEEN begin_expr AND end_expr;
在整个表达式中,expr表示的是一个单一的属性或者是一个计算的表达式,整个表达式中的三个参数 expr、begin_expr、end_expr 必须是同一种数据类型。
- between筛选的是 expr >= begin_expr并且 expr <= end_expr 的数据,如果不存在则返回的是0;
- not between筛选的是 expr < begin_expr或者 expr > end_expr 的数据,如果不存在则返回的是0;
- 如果 expr 返回的是 NULL,则between 也返回的是null (暂未验证)
between的用法
假如我们有一张数据库表如下所示
CREATE TABLE `t_income` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '唯一自增id', `income_date` varchar(255) NOT NULL COMMENT '收入年月', `amount` float NOT NULL COMMENT '收入金额', `target_amount` float NOT NULL DEFAULT '0' COMMENT '目标收入', `create_time` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
查询表中amount>=10并且amount<=50的数据
select * from t_income where amount between 10 and 50;
查询表中amount 和 target_amount 总和 >=100并且<=500的数据
select * from t_income where (amount + target_amount) between 100 and 500;
查询表中create_time 在 2019-01-01 到 2019-09-01 这个日期范围内的数据
select * from t_income where create_time between cast('2019-01-01' as DATE) and cast('2019-09-01' as DATE);
查询表中amount < 10 或者 amount > 50 的数据
select * from t_income where amount not between 10 and 50;
between的总结
通过上面的讲解,我们现在应该已经基本的学会了between的用法,但是如果在开发中,我们要查询某个属性大于某一个值 并且小于某个值的话,我们就只能用 > and < 啦
mysql中的between边界问题
between在不同的SQL中有不同的边界包含问题,查了下mysql官网对于between的解释。
在mysql中,between A and B 等同于表达式 >= A and <= B
官网地址:MySQL官网对于between的解释
mysql中,当对日期时间之类的字段进行比较时,需要注意几个点:
1.字段类型是date,年月日,类似‘2022-08-08’,between ‘2022-01-01’ and ‘2022-02-02’ 的查询结果包括’2022-01-01’和’2022-02-02’
2.字段类型是datetime,年月日时分秒,类似‘2022-08-08 08:08:08’,若要查询2022年1月1号(包含)到2022年2月2号(包含)的数据,使用between ‘2022-01-01 00:00:00’ and ‘2022-02-02 23:59:59’,不要使用between ‘2022-01-01’ and ‘2022-02-03’,因为这句相当于between ‘2022-01-01 00:00:00’ and ‘2022-02-03 00:00:00’,会将 '2022-02-03 00:00:00’的数据也查询到
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。