2016-08-14 14 views
2

私ははそれASCの列名(equipment_no)だと次のリストに示すように、それを適切にソートする方法を疑問に思ったことでを注文した後、以下のような値を持つ列を持っています。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 - 103 
T - AG - 104 
TG - 10 
TG - 100 
TG - 99 

は、私はそれはあなたが文字列関数を使用してソートしたい部分を抽出する必要が

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 
    TG - 10 
    TG - 99 
    TG - 100 
+2

データを正規化します。 – sagi

答えて

2

最後の数字を数字として扱いたいようです。そのトリックは、その名前で異なる数のハイフンを処理しています。一つだけハイフンがあった場合は、あなたができる:あなたのケースでは

order by substring_index(equipment_no, '-', 1), 
     substring_index(equipment_no, '-', -1) + 0 

を、これはうまくいくかもしれない:

order by (case when equipment_no not like '%-%-%' 
       then substring_index(equipment_no, '-', 1) 
       else substring_index(equipment_no, '-', 2) 
      end), 
     substring_index(equipment_no, '-', -1) + 0 

をこれはあなたの例のように、1つのまたは2ハイフンのケースを処理します。あなたが試みることができる

0

になりたい方法。以下の例はそれを行います。

order by trim(SUBSTRING_INDEX(equipment_no, '-', -1)) 
1

SELECT 
equipment_no 
FROM fas_details 
WHERE equipment_no LIKE 'T%' 
ORDER BY SUBSTRING_INDEX(equipment_no,SUBSTRING_INDEX(equipment_no ,'-',-1)+0,1), 
       SUBSTRING_INDEX(equipment_no ,'-',-1)+0; 

Demonstration: をあなたは(二重ハイフンのための)入力

SET @str := 'T - AG - 100'; 

SELECT SUBSTRING_INDEX(@str,'-',-1)+0 AS numberPart, 
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,'-',-1)+0,1) AS textPart 

出力4つの異なる組のためにここでデモンストレーションを確認することができます

numberPart textPart 100 T - AG - 

(ハイフン用)出力:

if equipment_no = 'TG - 100'

numberPart  textPart 
100    TG - 

注:それは関係なく、あなたのequipment_no列内のハイフンの数の動作します。

関連する問題