2011-11-24 110 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擴展名)