2012-03-28 114 views
1

我目前有一个简单的MySQL选择与order by名为postcodes列。这些邮编是英国。MySQL排序英国邮政编码

它目前正在按此顺序输出:SE1, SW1, SE10, SE11, SE2, SW2, SE3。我知道使用ABS()会纠正数字排序,但我不确定在这种情况下我该怎么做,因为有字母和数字。

我想在下面的顺序来显示它们:
SE1, SE2, SE3 SE10, SE11, SW1, SW2

感谢您的帮助。

+0

可能重复http://stackoverflow.com/questions/153633/natural-sort-in-mysql ) – 2012-03-28 18:00:48

+1

你忘了SW1W,EC1A等......这会造成更多问题...... GiroBank GIR 0AA,BFPO ...所以你甚至不能使用数字。这可能会比其他任何事情都更好。 – Ben 2012-03-28 20:08:19

回答

2

您可以在表格中添加一些额外的列以在其中包含片段,并使用第三列进行排序以返回订单。例如:

PostCodeTable 
|---------------------------------------------| 
|postCode| codePart1 | codePart2 | codePart3 | 
|char() | char() | int()  | whatever() | 
|---------------------------------------------| 
| SE1 | SE  | 1   |   | 
| SW1 | SW  | 10  |   | 
| SE10 | SE  | 10  |   | 
| SE11 | SE  | 11  |   | 
| SE2 | SE  | 2   |   | 
| SW2 | SW  | 2   |   | 
| SE3 | SE  | 3   |   | 
|---------------------------------------------| 

您的查询可能是:

Select 
    postCode 
from 
    PostCodeTable 
order by 
    codePart1, 
    codePart2 
    // etc etc as needed. 
[自然排序在MySQL(的
+0

由于交付点的数量,这是如何解决[细分](http://en.wikipedia.org/wiki/London_postal_district#High-density_districts)区域的问题的? SW1A,SW1E,SW1H等 – Ben 2012-07-07 10:24:37

+0

@Ben我不知道有多少个字母+数字+字母+数字的组合(因此codePart3),但如果将它们分成单独的组,则可以轻松地按它们排序按正确的顺序返回主要部分。 – Fluffeh 2012-07-07 10:29:54

相关问题