5

こんにちは、テーブルを並べ替えたいです。フィールドには、数字、アルファベット、およびアルファベット付きの数字が含まれています。つまり、

1
2
1a
11a
a
6a
b

これを並べ替えたいのですが、

1
1a
2
6a
11a
a
b

私のコードは、

SELECT * FROM tORDER BY CAST(st AS SIGNED), st
しかし、結果は、

a
b
1
1a
2
6a
11a

このURLでこのコードを見つけました

" http://www.mpopp.net/2006/06/sorting-of-numeric-values-mixed-with-alphanumeric-values/ "
誰でも私を助けてください

4

4 に答える 4

5

0これにより、テーブル内に が存在する場合でも、必要な並べ替え順序が実行されます。

SELECT * FROM t 
ORDER BY 
  st REGEXP '^[[:alpha:]].*', 
  st+0, 
  st

でテストする SQLfiddle

  • 最初の並べ替え基準として、文字で始まるものを、そうでないものの後に並べ替えます。それが正規表現の機能です。
  • 2 番目の並べ替え基準として、文字列の先頭の数値で並べ替えます (文字列st+0の先頭の数値部分に 0 を追加し、int を返します)。
  • 最後の手段として、文字列自体でソートして、アルファベット順に並べ替えます。
于 2013-05-04T06:55:14.827 に答える
-3

私はあなたのクエリに小さな変更を加えました -

SELECT *, CAST(st AS SIGNED) as casted_column
FROM t
ORDER BY casted_column ASC, st ASC

これはうまくいくはずです。理論的には構文は機能するはずですが、mysql が from タグの後にこれらのメソッドを受け入れない理由がわかりません。そのため、一時フィールドを作成し、それをソートしました。

これは私の経験どおりに機能するはずであり、確認できます。

SQL フィドル

于 2013-05-04T06:33:25.217 に答える