2017-06-21 11 views
0

私はサイズが255文字の 'varchar'型の列を持つテーブルを持っています。サンプル値は、この数字で選択したSQL結果を注文

Test/16-17/1 
Test/16-17/2 
test/16-17/10 
Test/16-17/11 
Test/16-17/20 
Test/16-17/22 

のように見えるしかし選択にBY句の検索結果をORDERを使用した上で、私は中の数値のChronolgical順に検索結果を取得してくださいどのように次の順序

Test/16-17/1 
Test/16-17/10 
Test/16-17/11 
Test/16-17/2 
Test/16-17/20 
Test/16-17/22 

であります値の終わり?

+0

? –

+0

私はMySQLを使用しています – Raky

答えて

0
ORDER BY CONVERT(RIGHT(test_column_name, 
    LENGTH(test_column_name) - LOCATE('/', REVERSE(test_column_name)) 
), UNSIGNED INTEGER); 

OR

ORDER BY CONVERT(substring_index(id, '/', -1), UNSIGNED INTEGER); 
+0

いいえ、有望ですが動作していません。 – Raky

+0

はい、この 'ORDER BY CONVERT(substring_index(id、'/'、-1)、UNSIGNED INTEGER);'見た目に有望なファンタスティックな作品です。これは良い一般化されたコードです。ありがとうございました。 – Raky

1

それは同じことを次の/とカラム内の2桁の数字を持っている場合は、あなたがあなたの特定の例については

order by right(vtest,2) 
+2

ああテストしてください – RiggsFolly

+1

はいこれも機能しています – Raky

0

を使用することができ、あなたがで注文することができます長さ、次に値:

order by length(vtest), vtest 

質問に含まれていない他の行に対してもこれが機能するかどうかはわかりません。

+0

それはボックスの考えからクールです。 –

+0

はいこれは動作しています – Raky

0

「/」最後の後に端部を選択し、番号に変換するために1を掛け:

ORDER BY RIGHT(test_column, LENGTH(test_column) - LOCATE('/', REVERSE(test_column))) * 1; 

OR

ORDER BY substring_index(id, '/', -1) * 1; 

これは基本的に同じですKeyur Panchalによって回答しますが、暗黙の変換を使用します。暗黙の変換には、1)読みやすく/書きやすい、2)変換するタイプを気にする必要がない、3)値。

+0

いいえ、有望そうですが、動作していません。 – Raky

+0

どうやって動かないのですか?エラーが発生しましたか、それともあなたが望むようにソートしませんでしたか?これは、Keyur Panchalの答えと基本的に同じですが、明示的な変換ではなく暗黙の変換を使用する点が異なります。彼の答えはうまくいったので、私も同じように動かなければなりません。暗黙の変換には多くの利点があります。 –

+0

'substring_index'がもっと好きなら、この' ORDER BY substring_index(id、 '/'、-1)* 1; 'のような暗黙の変換でも使うことができます。 –

0

これは関係なく動作しますどのような最初の10文字は次のとおりです。あなたはRDBMSを使用している

ORDER BY CONCAT(LEFT(vtest, 10), CASE WHEN LENGTH(vtest) = 12 
             THEN CONCAT(0,RIGHT(vtest,1)) 
             ELSE RIGHT(vtest,2) END)