【问题标题】:Use mySQL to order US States alphabetically使用 mySQL 按字母顺序排列美国各州
【发布时间】: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、stackoverflow、Google),但我找不到任何关于 ORDER BY “第二个字母/字符”的信息(或者,至少,我认为我没有发现了什么;也许我只是不明白)。

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

【问题讨论】:

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

标签: mysql sorting sql-order-by alphabetical


【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多