MySQLでは許可されていませんCAST('01' AS INT)
。SIGNED
代わりにまたはを期待しUNSIGNED
ます。
SELECT `01` FROM perf WHERE year = '2013' order by CAST(`01` AS SIGNED) LIMIT 3
詳細については、MySQLのドキュメントをCAST()
確認してください。
mysql> SELECT CAST('01' AS SIGNED);
+----------------------+
| CAST('01' AS SIGNED) |
+----------------------+
| 1 |
+----------------------+
1 row in set (0.00 sec)
CASE
数値以外の文字列を強制的に最後に並べ替えるには、にを適用する必要があります。これにより、文字列に非常にORDER BY
高い値が割り当てられます。01
条件は、の値がに等しくないことをテストする必要があります。数値以外の文字列はゼロにキャストされるため0
、結果にキャストすると結果はに等しくなりません。SIGNED
0
これらの条件が満たされない場合、文字列は数値ではないと見なされ、の値が999999999になりORDER BY
、最後にプッシュされます。その後、によって注文されname
ます。
SELECT * FROM perf
WHERE year = '2013'
ORDER BY
CASE WHEN (`01` <> '0' AND CAST(`01` AS SIGNED) <> 0) THEN CAST(`01` AS SIGNED) ELSE 999999999 END,
name
LIMIT 3
http://sqlfiddle.com/#!2/846e2/6
これらの並べ替えを降順にするには、高い値ではなく、途方もなく低い値(負)を使用します
CASE WHEN (`01` <> '0' AND CAST(`01` AS SIGNED) <> 0) THEN CAST(`01` AS SIGNED) ELSE -999999999 END DESC,