テーブルにvarcharフィールドがあり、それを並べ替えたい。しかし、私はこのフィールドを整数として処理する必要があります。テキストとして並べ替えると「19,2,20」の順序になりますが、正しい順序「2,19,20」にしたいのですが。
誰か助けてもらえますか?
どういうわけか、CAST
でクエリを実行できませんでした。いつもError Code: 1064 near "DECIMAL"
(または私が選択した他の数値タイプ)。そこで、varchar
を数値としてソートする別の方法を見つけました。
SELECT *
FROM mytable
ORDER BY ABS(mycol)
少しシンプルで私の場合は機能します。
SELECT *
FROM mytable
ORDER BY
CAST(mycol AS DECIMAL)
これが解決策です
SELECT * FROM MyTable ORDER BY ABS(MyCol);
他のすべての回答はABS
を使用します。これは、整数が正であると仮定して、値を絶対(正)値に変換します。より良い解決策は、* 1
:
SELECT * FROM mytable ORDER BY mycol * 1
これは、負の数を正の数にキャストするのを防ぐためです。発想: mysql sort string number
この目的でABS()
を実行できます。 ABS()は、absolute (positive) value of the specified expression
を返す数学関数です。したがって、クエリは次のようになります
SELECT * FROM MyTable ORDER BY ABS(MyCol);
必要に応じて、このコードを使用してvarcharフィールドを注文できます
SELECT * FROM mytable ORDER BY ABS(mycol)