sql between and 无效、无结果及注意事项
基本
如果有时候使用between and 子句查询不到数据,那么可能犯了这个错误:
select * from table where column between xxx and yyy
你以为查询结果是xxx和yyy之间的数据,而忽略了他们的顺序是有要求的。 列表的值必须是xxx所代表的值在排前,而yyy所代表的值在后才能够查询到。并不是说只要数据被 xxx
和 yyy
包围就能查询到。这个子句更像 from xxx to xxx
。更准确的说是查列中从xxx(数值)到yyy(数值)的数据。
它的语法:
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
微软的文档对此描述得比较清楚:
实例
存在这么一个表:
那么执行
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 <=y
或 x< val <y
或 x<= val <y
所以,得检查所使用数据库系统是如何处理 BETWEEN….AND 操作符的。