MySQL データベースに次のようなデータがあるとします。
01, 001, 2, 9, 009, 23, 15, 19, 09, 08, 1 etc.
したがって、次のようにデータを昇順に並べ替えます。
001, 01, 1, 1, 2, 08, 009, 09, 9, 15, 19, 23 etc.
を使用するORDER BY value ASC
と、機能しません。並べ方はどうすればいいですか?最初の値を 1、次に 2、3 にしたい ..... それは可能ですか?
あなたが書いたものは整数で動作するはずです。ただし、あなたの質問から、指定している数値は文字列として保存されていると想定しているため、文字列としてソートされています。
その場合、ソートが正しく機能するように整数にキャストする必要があります。それは次のようなことをするのと同じくらい簡単です
ORDER BY <column> / 1 ASC, <column>
1 で乗算または除算すると、データベースは並べ替えの前に文字列を整数に変換します。001
常に前に来る手段の 2 番目の使用1
。
質問を読み直すと1
、表に1
との両方が含まれていても、一度だけ表示されることを期待しているように思えます001
。その場合は、次のようにします。
SELECT DISTINCT (<column> / 1) AS intcol
FROM ...
ORDER BY intcol
これらは文字列として格納されるため、mysql が自動的に値を数値に解析するため、単純に 1 を掛けることができます。文字列が文字で始まる場合、値はゼロになります。
ORDER BY col * 1, col
ご覧のとおり、order by
句にはキーワードがありませんASC
。これは、オプティマイザがデフォルトで昇順でソートするためです。