我有一个名为b的表,其中列j是varchar(3),其中我存储了像
这样的值j
----
a
b
c
aa
ab
ac
当我写这样的语句时
select * from b where j>"aa";
显示
j
----
b
c
ab
ac
为什么会这样...我认为它会显示高于'aa'的值,它应该省略值'aa','a','b'和'c'但它只省略值'a'和'aa'......为什么会这样? 我想知道当我使用多个字符时它是如何检查值的
答案 0 :(得分:3)
这是简单的字母顺序。
SELECT j FROM b ORDER BY j
将返回:
j
----
a
aa
ab
ac
b
c
然后应该更清楚地知道值> 'aa'是:
SELECT j FROM b WHERE j > 'aa' ORDER BY j
j
----
ab
ac
b
c
答案 1 :(得分:1)
这是按字典顺序排列的。就像你在字典中找到的一样。
在字典中,首先比较第一个字母,然后转到下一个字母。
答案 2 :(得分:0)
在评估字符串时,b
,c
,ab
和ac
正在 aa
后排序这就是他们被归还的原因。最终,这是由于如何为表的语言环境完成字符串排序。
答案 3 :(得分:0)
这是因为字符串比较优先于第一个字母。
如果要跳过字符串长度小于2的所有值,则需要
SELECT * FROM b WHERE LENGTH(j) >= 2 AND j > 'aa'
答案 4 :(得分:0)
where子句使用字典顺序进行比较:
一 AA AB AC b ç
答案 5 :(得分:0)
这样做是因为:
aa出现在b,c,ab,ac之前,但不会出现在a或aa之前的字母顺序中,如English language dictionary
。