2013-09-24 44 views
0

我看看類似的排序解決方案,但沒有找到我在找什麼。MySQL:如何訂購生成的字母數字?

,如果我與排序列名的數據是什麼,如ORDER BY generated_column ASC 數據是:

A1AAA1 
A1AAA10 
A1AAA11 
A1AAA12 
A1AAA13 
... 
... 
A1AAA2 
A1AAA20 
A1AAA21 
... 
A1AAA3 
... 
A1AAB1 
... 
A1AAC1 
... 
A1AAD1 
PREAAA123 

你會建議我這樣的數據進行排序?

A1AAA1 
A1AAA2 
A1AAA3 
... 
A1AAA10 
A1AAA11 
A1AAA12 
A1AAA13 
... 
A1AAA20 
A1AAA21 
... 
A1AAB1 
... 
A1AAC1 
PREAAA123 

回答

0

可以後排序字符串分割成aplhanumeric部分和其餘部分轉換成一個數字,然後說

ORDER BY substring(generated_column, 1, 5) ASC, 
     substring(generated_column, 6) * 1 ASC 
+0

真的很好的解決方案應該是通用的。這不是 – mvp

+0

好的解決方案,但它不足以滿足我的需求。 字母A1的長度可以像前綴一樣改變,也許A1 PRE3 PRE4 EX1等,所以長度不是靜態的。 – Zeigen

+0

@Zeigen:你需要什麼? –

0

有這個由Drupal的項目提供了非常全面的通用的解決方案:https://drupal.org/project/natsort

它不需要Drupal,可以安裝在任何MySQL 5或PostgreSQL服務器上。

相關問題