使用mySQL按字母顺序排序美国各州

时间:2011-11-24 20:50:20

标签: mysql sorting sql-order-by alphabetical

相对较新的mySQL所以这可能很简单:

我有一个名为Zip的表,有三列:

Zip varchar(255)
City varchar(255)
State enum('AL','AK','AZ','AR','CA',etc.,etc., 'WY'

当我运行查询时:

SELECT DISTINCT State FROM Zip ORDER BY State ASC;

我得到了这个结果:

+-------+
| State |
+-------+
|       |
| AL    |
| AK    |
| AZ    |
| AR    |
etc.

所以它按照第一个字母的字母顺序对列表进行排序就好了,但它不按字母顺序排序。

我到处搜索(w3schools,dev.mysql.com,stackoverflow,谷歌),我找不到任何关于ORDER BY“第二个字母/字符”(或者,至少,我不认为我发现了什么;也许我只是不明白。)

关于我能做什么的任何想法?

3 个答案:

答案 0 :(得分:4)

尝试将枚举转换为字符类型:

SELECT DISTINCT State
FROM Zip
ORDER BY CAST(State AS CHAR)

答案 1 :(得分:3)

STATE是一个枚举,因此按照它放入该枚举定义的顺序排序。 (请注意,您的定义中包含AZAR,这就是他们的订购方式。

STATE更改为CHAR(2)(因为美国州的缩写不超过2个字母),并且您的ORDER BY应该可以正常使用。

(另外,ZIP可以大大减少,因为最大邮政编码为10个字符 - ZIP为5,连字符(短划线)和+4扩展名。)

答案 2 :(得分:0)

你没有正确地对你的枚举进行排序。如果您只是使用标准CHAR值而没有枚举,那么它将起作用。但是,您使用固定顺序设置枚举,因此它将按照您的枚举设置进行排序。

订购你的枚举:

State enum('AK','AL','AR','AZ','CA',etc.,etc., 'WY'