2016-02-09 209 views
3

我有類似下面值的列排序由它後的列名(equipment_no)ASC,想知道如何如圖所示的下一個列表它正確排序。如何對MYSQL中的字母數字列進行排序?

SELECT equipment_no FROM fas_details WHERE equipment_no LIKE 'T%' ORDER BY equipment_no 

請告訴我你的建議。謝謝。

MySQL如何排序

T - AG - 01 
T - AG - 02 
T - AG - 07 
T - AG - 08 
T - AG - 09 
T - AG - 10 
T - AG - 100 
T - AG - 101 
T - AG - 102 
T - AG - 103 
T - AG - 104 
T - AG - 11 
T - AG - 12 
T - AG - 13 

如何我希望它是

T - AG - 01 
    T - AG - 02 
    T - AG - 07 
    T - AG - 08 
    T - AG - 09 
    T - AG - 10 
    T - AG - 11 
    T - AG - 12 
    T - AG - 13 
    T - AG - 100 
    T - AG - 101 
    T - AG - 102 
    T - AG - 103 
    T - AG - 104 
+0

你在找什麼叫做「自然排序」 – Uberfuzzy

回答

1

我想你想以升序字母順序,同時考慮設備的訂貨太多的數字部分的equipment_no。

SELECT equipment_no FROM fas_details WHERE equipment_no LIKE 'T%' ORDER BY substring(equipment_no,1,9), substring(equipment_no,10)*1 

我認爲equipment_no的前9個字符是字母,而其餘字符是數字字符。將數字子串乘以1會將其強制爲數字。

3

試試這個:

Order By CAST(SUBSTRING_INDEX(equipment_no,'-',-1) AS UNSIGNED) 

,或者你可以嘗試使用RIGHT像

CAST(RIGHT(equipment_no, (CHARINDEX('-',REVERSE(equipment_no),0))-1) AS UNSIGNED) 
+1

'CHARINDEX'是'sql-server'函數。 – Wanderer

2

使用substring_index函數來獲取從字符串的數量,然後通過將其轉換爲無符號整數依次是:

SELECT equipment_no FROM fas_details WHERE equipment_no LIKE 'T%' 
ORDER BY cast(substring_index(equipment_no,'-',-1) as unsigned) 
0

我認爲做一個很好的辦法就是通過你的數字標記進行排序。它可以使用SUBSTRING函數獲得(您的結構似乎是固定的)。

但是,性能不是很好,最好的選擇是將該號碼實際存儲在單獨的列中。存儲可以直接由您的應用程序或using auto generated columns完成。

有關您的問題的更多細節,也可以找到here

+0

感謝這個想法,下次我實現這樣的想法時,我一定會記住這一點 – wishman

0

由於只有在最後幾位數字的區別,我們可以通過

ORDER BY LENGTH(equipment_no), equipment_no;

這裏實現它,它會首先以升序字符串的長度,然後通過該字符串命令的結果。

查詢

SELECT * FROM fas_details 
ORDER BY LENGTH(equipment_no), equipment_no; 

SQL Fiddle Demo

在你的答案的結果是由整個字符串排序下來。因此,當您訂購一個字符串時,例如:21010將排在第一位。所以只需按字符串的長度排序。
所以你可能不得不改變你的SQL查詢,如下所示。

查詢

SELECT equipment_no 
FROM fas_details 
WHERE equipment_no LIKE 'T%' 
ORDER BY LENGTH(equipment_no), equipment_no; 

結果

+---------------+ 
| equipment_no | 
+---------------+ 
| T - AG - 01 | 
| T - AG - 02 | 
| T - AG - 07 | 
| T - AG - 08 | 
| T - AG - 09 | 
| T - AG - 10 | 
| T - AG - 11 | 
| T - AG - 12 | 
| T - AG - 13 | 
| T - AG - 100 | 
| T - AG - 101 | 
| T - AG - 102 | 
| T - AG - 103 | 
| T - AG - 104 | 
+---------------+ 
相關問題