使用 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
是一个枚举,因此按其放入该枚举定义的顺序进行排序。 (请注意,您的定义中有AZ
、AR
,这就是它们的顺序)。
将STATE
更改为CHAR(2)
(因为美国各州的缩写不超过2 个字母),您的ORDER BY
应该可以正常工作。
(另外,ZIP
可以大大减少,因为美国邮政编码的最大长度为 10 个字符 - 邮政编码为 5 个字符,连字符(破折号)和 +4 扩展名。)
【讨论】:
【参考方案3】:你没有正确排序你的枚举。如果您只使用标准 CHAR 值而没有枚举,它会起作用。但是,您将枚举设置为固定顺序,因此它会像您的枚举一样进行排序。
订购您的枚举:
State enum('AK','AL','AR','AZ','CA',etc.,etc., 'WY'
【讨论】:
以上是关于使用 mySQL 按字母顺序排列美国各州的主要内容,如果未能解决你的问题,请参考以下文章