1

对 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、Google),但我找不到任何关于 ORDER BY “第二个字母/字符”的信息(或者,至少,我认为我什么也没找到;也许我只是不明白)。

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

4

3 回答 3

4

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

SELECT DISTINCT State
FROM Zip
ORDER BY CAST(State AS CHAR)
于 2011-11-24T20:55:48.300 回答
3

STATE是一个枚举,因此按其放入该枚举定义的顺序进行排序。(请注意,您的定义中有AZ, AR,这就是它们的排序方式)。

更改STATECHAR(2)(因为没有美国州的缩写超过 2 个字母),你ORDER BY应该可以正常工作。

(此外,ZIP可以大大减少,因为最大美国邮政编码为 10 个字符 - 邮政编码为 5 个字符,连字符(破折号)和 +4 扩展名。)

于 2011-11-24T20:56:59.060 回答
0

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

订购您的枚举:

State enum('AK','AL','AR','AZ','CA',etc.,etc., 'WY'
于 2011-11-24T20:52:58.880 回答