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

Posted

技术标签:

【中文标题】使用 mySQL 按字母顺序排列美国各州【英文标题】:Use mySQL to order US States alphabetically 【发布时间】:2011-11-24 20:50:19 【问题描述】:

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

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

【问题讨论】:

感谢大家的帮助。很高兴知道“枚举”类型的局限性。至于 Zip 列太大:我知道。我不是真正创建数据库的人。这是一个班级的小组项目,我只是放手。不想和群里的人争吵,干脆说完。 【参考方案1】:

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

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

【讨论】:

太棒了!这行得通!而且我不必返回数据库来编辑数据类型。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

订购您的枚举:

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

【讨论】:

以上是关于使用 mySQL 按字母顺序排列美国各州的主要内容,如果未能解决你的问题,请参考以下文章

mysql根据汉字首字母排序的方法并按字母分组

按字母顺序排列的数据透视表

使用LocalStorage按字母顺序排列内容列表

用单词和数字按字母顺序排列字符串

excel中怎么将英文单词按字母顺序排序?

ListView 按字母顺序排列,没有 Comparable