sql between and 无效、无结果及注意事项

基本

如果有时候使用between and 子句查询不到数据,那么可能犯了这个错误:

select * from table where column between xxx and yyy

你以为查询结果是xxx和yyy之间的数据,而忽略了他们的顺序是有要求的。 列表的值必须是xxx所代表的值在排前,而yyy所代表的值在后才能够查询到。并不是说只要数据被 xxxyyy 包围就能查询到。这个子句更像 from xxx to xxx。更准确的说是查列中从xxx(数值)到yyy(数值)的数据。

它的语法:

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

微软的文档对此描述得比较清楚:

https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/between-transact-sql?view=sql-server-2017


实例

存在这么一个表:

这里写图片描述

那么执行

SELECT * FROM persons WHERE LastName BETWEEN '尼玛兽' AND 'Bush';

其结果为空。

这里写图片描述

然而交换between 和and 值的位置,得到的也并不是期望的结果:

SELECT * FROM persons WHERE LastName BETWEEN 'Bush' AND '尼玛兽';

这里写图片描述

尼玛兽 之后的东西都出来了。

如果执行

SELECT * FROM persons WHERE LastName BETWEEN 'carter' AND 'Wilson';

你以为 尼玛兽 会存在,事实上不会,你以为 hehe 不会存在,但他就在那里。

很明显了,它比较的是字段的值:

xxx<= val <=yyy

上面比较的就是字符串值了,而并非直接一个框,选中中间。

一个悲催的事情是:不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。可能相当于:

x<= val <=yx< val <yx<= val <y

所以,得检查所使用数据库系统是如何处理 BETWEEN….AND 操作符的。

猜你喜欢

转载自blog.csdn.net/Mingyueyixi/article/details/81190225