mysql中的where子句

时间:2012-01-04 20:27:51

标签: mysql sql

我有一个名为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'......为什么会这样? 我想知道当我使用多个字符时它是如何检查值的

6 个答案:

答案 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)

在评估字符串时,bcabac正在 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