BETWEEN的作用
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
BETWEEN的边界
BETWEEN运算符选择给定范围内的值。值可以是数字,文本或日期。
BETWEEN运算符是包含性的:包括开始和结束值,等价于>= AND <=
BETWEEN的语法
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
示例数据库
以下是"Products"表中的数据:
![ba7126a352e3c84dc8a8b531797c777d.png](https://i-blog.csdnimg.cn/blog_migrate/b608490587c943d8f7ada36edf07a556.jpeg)
BETWEEN 实例
以下SQL语句选择价格在30到60之间的所有产品:
实例
SELECT * FROM ProductsWHERE 价格 BETWEEN 30 AND 60;
结果:
![ce6cec5fde99d589812376cf00c91993.png](https://i-blog.csdnimg.cn/blog_migrate/910d42f90eb9ba41527ea7ad2e965e49.jpeg)
可以看到 价格 那一列的数据都是介于30(包含)和60(包含)之间的
NOT BETWEEN 实例
要显示前面示例范围之外的产品,请使用NOT BETWEEN:
实例
SELECT * FROM ProductsWHERE 价格 NOT BETWEEN 30 AND 60;或SELECT * FROM ProductsWHERE NOT 价格 BETWEEN 30 AND 60;
这里的NOT位置可以在列的前面或者后面,结果都是一样的,只是个人写法习惯
结果:
![ea3ea0d0a393ac51ff4f9ec0b8aac77d.png](https://i-blog.csdnimg.cn/blog_migrate/77b2af2bcd6b9ff33678f0fb9262ba9e.jpeg)
价格那一列就会显示排除了在30到60之间的数了。
带有 IN 的 BETWEEN 操作符实例
以下SQL语句选择价格在10到60之间但名称不是大米和香蕉的所有产品:
实例
SELECT * FROM ProductsWHERE (价格 BETWEEN 10 AND 60)AND 名称 NOT IN ('大米','香蕉');
因为大米和香蕉都是字符类型,所以要用单引号('')
结果:
![6c317dea8da8b01a1700240505b72b49.png](https://i-blog.csdnimg.cn/blog_migrate/405a94ae1f883494d13a5f292d87c452.jpeg)
可以看到价格一列均满足10到60之间,名称一列香蕉(45.00)的价格本来也符合,但是因为我们用NOT IN把他排除了,所以也不显示出来。
带有文本值的 BETWEEN 操作符实例
以下SQL语句选择所有带有名称 BETWEEN'面包'和'香蕉'的产品:
实例
SELECT * FROM ProductsWHERE 名称 BETWEEN '面包' AND '香蕉'
结果:
![bf5cd9e6e0030b2be54224110e2e460a.png](https://i-blog.csdnimg.cn/blog_migrate/b85c1c9b5daeeb7ca5babd07b807f4cb.jpeg)
你注意到了吗?
为什么会出现苹果呢?
这是因为数据库在进行筛选时是按照名称拼音首字母的ASCII进行排序的,面包的首字母是M,香蕉的首字母是X,而苹果的首字母是P正好介于他们之间,所以被包含了。
那为什么又没有雪梨呢?雪梨的首字母也是X啊?
数据库在首字母相同时会继续比较第二个字母,如果第二个也相同依次往下比较,直到全部对比完。这里香蕉的全拼是XIANGJIAO,而雪梨的全拼是XUELI,很明显按升序排列第二个字母U比字母I大,它已经超出了字母I这个上限的范围,所以雪梨被排除了。
带有文本值的 NOT BETWEEN 操作符实例
以下SQL语句选择名称不是BETWEEN'面包'和'香蕉'的所有产品:
实例
SELECT * FROM ProductsWHERE 名称 NOT BETWEEN '面包' AND '香蕉'
结果
![ae794c7d586f62842364e1dc86650f30.png](https://i-blog.csdnimg.cn/blog_migrate/3d4ec0fc46dc143f4ae4a572f95626ae.jpeg)
排除掉面包和香蕉之间的数就剩下大米和雪梨了。
日期边界问题
示例表Orders
下面是选自 "Orders" 表的数据:
![e7dc4a68d535d6014dd2144c30f35425.png](https://i-blog.csdnimg.cn/blog_migrate/fb4c9690d18cb711d2300d41f49e5ad2.jpeg)
带有日期值的 BETWEEN 操作符实例
以下 SQL 语句选取 订单日期 介于 '2018-06-28' 和 '2018-09-28' 之间的所有订单:
实例
SELECT * FROM OrdersWHERE 订单日期 BETWEEN '2018-06-28' AND '2018-09-28';
结果:
![09baa0b54e99ca0f71fb01a57dced9e2.png](https://i-blog.csdnimg.cn/blog_migrate/edb4a40e5694bd9957399467e4c529fc.jpeg)
请注意,BETWEEN AND在处理日期可能会有你意向不到的结果
SQL中 between and是包括边界值的,not between不包括边界值,不过如果使用between and 限定日期需要注意,如果and后的日期是到天的,那么默认为00:00:00 例如:and 后的日期为2018年09月28日,就等价于2018-09-28 00:00:00 ,那么2018-09-28 11:24:54.000的数据就查不到了,如果要查到2018-09-28这一整天的数据,那么在取值的时候需要加1天,即BETWEEN '2018-06-28' AND '2018-09-29',这样返回的就是6月28日(含)到9月28日(含)的所有数据了。