2011-11-24 109 views
1

相对较新的MySQL所以这可能是一个简单的一个:使用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

谢谢大家的帮助。很高兴知道“枚举”类型的局限性。就Zip列太大而言:我知道。我并不是真正创建数据库的人。这是一个班级的团体项目,我只是放手。不想与团体成员争论,只是完成它。 – Nick

回答

4

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

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

太棒了!这工作!我不必回到数据库来编辑数据类型。 – Nick

0

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

订购您的枚举:

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

STATE是一个枚举,因此得到由顺序排序它放置到该定义枚举。 (请注意,您的定义中有​​,AR,这就是它们的订购方式)。

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

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