web-dev-qa-db-ja.com

SQL ORDER charsの数値

文字として格納された数値の列があります。この列に対してORDER BYを実行すると、次の結果が得られます。

100
131
200
21
30
31000
等。

これらの文字を数字で注文するにはどうすればよいですか?何かを変換する必要がありますか、またはこのためのSQLコマンドまたは関数が既にありますか?

ありがとうございました。

37
T.T.T.

これを試して:

ORDER BY CAST(thecolumn AS int)
74
Ray Hidayat

これは私のために働いた:

ORDER BY ABS(column_name)
23
Nev

これは、「自然な並べ替え」での数値文字列の順序付けに関する問題です(Googleで「自然な並べ替え」を検索すると、大量のものが見つかります)。基本的に、文字列をintとしてキャストし、結果の値でソートすることで修正できます。

2
BenAlabaster

状況によっては、これが適切な場合があります。

ORDER BY LENGTH(column_name), column_name

特に、すべての数字または文字と数字が混在しているが、すべて同じ長さの列がある場合。

1
Irgendwoanders

これは、charデータ型では、行を文字列としてソートしているためです。

ORDER BY CAST()の考え方は正しいですが、返される結果の数が増えると、このパフォーマンスは低下します。

この列の数値データのみの場合、ベストプラクティスは適切な数値データタイプを見つけて変更することです。

列を実際に変更できず、パフォーマンスの問題がある場合は、整数にキャストされた値を含むソート順列を使用することをお勧めします(nullは適切な値に変換されます)。

ソート順列にインデックスを付け、理想的には、CHAR値にトリガーを追加して、char値の挿入または更新が整数値の更新をトリガーするようにします。

1
John