order by seriq asc
「10000」「100000」「97000」のような数字を使用しているのになぜ
スクリプトは結果を表示します:
1: 10000
2: 100000
3: 97000
?
列に文字列として格納されているため
seriq
1- 列を からVARCHAR/CHAR
に変更してみてくださいINT
。
2- CAST()を使用して文字列から int に変換できます。例えばSELECT CAST('123' AS SIGNED);
列の型を int に変更すると、最適なデータ ストレージとパフォーマンスが得られるため、最適なソリューションです。ただし、それができない場合は、次の回避策が可能です。
select * from foo order by seqid+0
これにより、order by column の int への型キャストが強制され、並べ替えは数値的に行われます。
値を数値順に並べ替えるseriq
には、列が数値列である必要があります。テキスト列の場合、値はcollationに従ってアルファベット順に並べ替えられます。例えば:
CREATE TABLE Test
(
Foo int
);
INSERT INTO Test VALUES (10000);
INSERT INTO Test VALUES (100000);
INSERT INTO Test VALUES (97000);
select * from Test order by Foo asc;
簡単な解決策は、MySQL に ORDER BY 句で文字列を数値に変換させることです。
クエリを次のように変更します。
ORDER BY seriq+0 ASC
MySQL は任意の文字列を数値に変換しようとし、最初の「無効な」文字まで文字を読み取ろうとすることに注意してください。たとえば、'123A' は数値 123 に変換されます。