文字として格納された数値の列があります。この列に対してORDER BYを実行すると、次の結果が得られます。
100
131
200
21
30
31000
等。
これらの文字を数字で注文するにはどうすればよいですか?何かを変換する必要がありますか、またはこのためのSQLコマンドまたは関数が既にありますか?
ありがとうございました。
これを試して:
ORDER BY CAST(thecolumn AS int)
これは私のために働いた:
ORDER BY ABS(column_name)
これは、「自然な並べ替え」での数値文字列の順序付けに関する問題です(Googleで「自然な並べ替え」を検索すると、大量のものが見つかります)。基本的に、文字列をintとしてキャストし、結果の値でソートすることで修正できます。
状況によっては、これが適切な場合があります。
ORDER BY LENGTH(column_name), column_name
特に、すべての数字または文字と数字が混在しているが、すべて同じ長さの列がある場合。
これは、charデータ型では、行を文字列としてソートしているためです。
ORDER BY CAST()
の考え方は正しいですが、返される結果の数が増えると、このパフォーマンスは低下します。
この列の数値データのみの場合、ベストプラクティスは適切な数値データタイプを見つけて変更することです。
列を実際に変更できず、パフォーマンスの問題がある場合は、整数にキャストされた値を含むソート順列を使用することをお勧めします(nullは適切な値に変換されます)。
ソート順列にインデックスを付け、理想的には、CHAR値にトリガーを追加して、char値の挿入または更新が整数値の更新をトリガーするようにします。