我知道'之间'运算符包含指定的范围..但在下面的情况下,它的工作方式不同
我的表客户具有以下属性。
customer
{
customername varchar2(30),
custid integer(10,0)
}
查询
select * from customer c where c.customername between 'a' and 'b';
以上查询仅提取数据客户名称以' a'开头。但 当我们使用'之间在这种情况下,具有数字的运营商都是包容性的。任何人都可以向我解释这个行为。
答案 0 :(得分:7)
它并没有什么不同。 BETWEEN
仍然具有包容性。但是你应该记住,编程中的字符串比较比整数比较稍微复杂一点。在数据库中,字符串的排序如下:
'a' < 'andy' < 'andy1' < 'anna' < 'b' < 'boris' < 'brian'.
所以between 'a' and 'b'
将返回:
'a', 'andy', 'andy1', 'anna', 'b'
但是,由于您没有一个名为'b'
的客户,您只能得到:
'a', 'andy', 'andy1', 'anna'
如果您只想要名称以a或b开头的客户,请使用SUBSTR:
select * from customer c where SUBSTR(c.customername, 1, 1) between 'a' and 'b';
答案 1 :(得分:4)
BETWEEN
运算符充当:
和
的价值expr1 BETWEEN expr2 AND expr3
是布尔表达式的值:
expr2 <= expr1 AND expr1 <= expr3
对于字符串和数字,它的工作方式相同,但你必须对字符串考虑更多。
特别是:
'a' <= 'b' // true
'ab' <= 'b' // true
'b' <= 'b' // true
'ba' <= 'b' // FALSE
如果您的数据集中的客户名称与b
完全相同,则between
查询会返回该客户。但是bob
不会被返回,因为'bob' <= 'b'
是假的。