web-dev-qa-db-ja.com

MySQLは整数としてvarcharフィールドを注文します

テーブルにvarcharフィールドがあり、それを並べ替えたい。しかし、私はこのフィールドを整数として処理する必要があります。テキストとして並べ替えると「19,2,20」の順序になりますが、正しい順序「2,19,20」にしたいのですが。

誰か助けてもらえますか?

32
ntan

どういうわけか、CASTでクエリを実行できませんでした。いつもError Code: 1064 near "DECIMAL"(または私が選択した他の数値タイプ)。そこで、varcharを数値としてソートする別の方法を見つけました。

SELECT *
FROM mytable
ORDER BY ABS(mycol)

少しシンプルで私の場合は機能します。

56
yentsun
SELECT  *
FROM    mytable
ORDER BY
        CAST(mycol AS DECIMAL)
23
Quassnoi

これが解決策です

SELECT * FROM MyTable ORDER BY ABS(MyCol);
16
speeday125

他のすべての回答はABSを使用します。これは、整数が正であると仮定して、値を絶対(正)値に変換します。より良い解決策は、* 1

SELECT * FROM mytable ORDER BY mycol * 1

これは、負の数を正の数にキャストするのを防ぐためです。発想: mysql sort string number

7
Guido

この目的でABS()を実行できます。 ABS()は、absolute (positive) value of the specified expressionを返す数学関数です。したがって、クエリは次のようになります

SELECT * FROM MyTable ORDER BY ABS(MyCol);
6
user2243219

必要に応じて、このコードを使用してvarcharフィールドを注文できます

SELECT * FROM mytable ORDER BY ABS(mycol)
2