2

現在使用して並べ替えている varchar 列があります: ORDER BY (col_name+0)

この列には数字と数字以外の両方が含まれており、この並べ替えの結果は次のようになります。

D3
D111
M123-M124
M136
4
9
10
25
37b
132
147-149
168b
168ca

この並べ替えは、このアプリケーションにはほぼ完璧ですが、1 つの例外があります。文字で始まるアイテムを、数字で始まるアイテムの後に表示する必要があります。これが理想的な結果です。

4
9
10
25
37b
132
147-149
168b
168ca
D3
D111
M123-M124
M136

選択後にコード内のすべてを再度ループする必要はなく、選択ステートメントでこれを実現できることを願っています。何か案は?

4

1 に答える 1

1

これを使用できます:

ORDER BY
  col_name regexp "^[^0-9]",
  case when col_name regexp "^[0-9]" then col_name + 0
       else mid(col_name, 2, length(col_name )-1) + 0 end,
  col_name

これにより、先頭の数字で始まる行が配置されます。col_name が数字で始まる場合は、その数値で並べ替えます。そうでない場合は、2 番目の文字から始まる文字列の数値で並べ替えます。

于 2013-01-23T18:39:11.137 に答える