2014-04-20 68 views
0

我有以下存儲在MySQL數據庫模式字符串:排序中,然後最後三個數字的字母數字字符串

Pattern: 1AB23CD456 

我要排序的最後三個數字之前進行排序ABCD之間的中間數。

對於最後三個數字排序我有下面的代碼

SELECT * FROM Table1 ORDER BY RIGHT(pattern,3) 

電流輸出:

+------------+ 
| 1aa22aa101 | 
| 1bb33bb101 | 
| 1cc44cc101 | 
| 1dd11dd101 | 
+------------+ 

預期輸出:

+------------+ 
| 1cc44cc101 | 
| 1bb33bb101 | 
| 1aa22aa101 | 
| 1dd11dd101 | 
+------------+ 

注:我想在中間兩個數字進行排序DESC命令。

+0

是位置相同的AB和CD的發生? –

+0

不,ab和cd可以是任何字符組合 –

+0

您是否可以更新您的有問題的示例數據集以顯示不同的事件,因爲現在它看起來與常數相同的ab和cd組合 –

回答

2

我認爲這應該工作:

SELECT * FROM Table1 ORDER BY substring(pattern,4,2) desc, RIGHT(pattern,3) 
+0

它的工作。謝謝 :) –

1

下面是這樣一個方法:

order by substring_index(col, 'ab', 2) + 0 DESC 

這實際上不找'cd'。相反,它只需要'ab'之後的數字。這是使用稱爲靜默轉換的MySQL功能,它將字符串轉換爲數字而不會產生錯誤。它只是轉換領先的數字。

要通過這種排序,然後通過最後三個數字:

order by substring_index(col, 'ab', 2) + 0 DESC, 
     right(col, 3) + 0; 
+0

** ab **和** cd **可以是任意兩個字符組合 –

+0

@hsaka:從你的問題中不清楚,我只是想警告這種含糊不清,答案仍然是「正確的」:) – hakre

相關問題