相对较新的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“第二个字母/字符”(或者,至少,我不认为我发现了什么;也许我只是不明白。)
关于我能做什么的任何想法?
答案 0 :(得分:4)
尝试将枚举转换为字符类型:
SELECT DISTINCT State
FROM Zip
ORDER BY CAST(State AS CHAR)
答案 1 :(得分:3)
STATE
是一个枚举,因此按照它放入该枚举定义的顺序排序。 (请注意,您的定义中包含AZ
,AR
,这就是他们的订购方式。
将STATE
更改为CHAR(2)
(因为美国州的缩写不超过2个字母),并且您的ORDER BY
应该可以正常使用。
(另外,ZIP
可以大大减少,因为最大邮政编码为10个字符 - ZIP为5,连字符(短划线)和+4扩展名。)
答案 2 :(得分:0)
你没有正确地对你的枚举进行排序。如果您只是使用标准CHAR值而没有枚举,那么它将起作用。但是,您使用固定顺序设置枚举,因此它将按照您的枚举设置进行排序。
订购你的枚举:
State enum('AK','AL','AR','AZ','CA',etc.,etc., 'WY'