0

order by seriq asc「10000」「100000」「97000」のような数字を使用しているのになぜ

スクリプトは結果を表示します:

1: 10000
2: 100000
3: 97000

?

4

4 に答える 4

3

列に文字列として格納されているため

seriq1- 列を からVARCHAR/CHARに変更してみてくださいINT

2- CAST()を使用して文字列から int に変換できます。例えばSELECT CAST('123' AS SIGNED);

于 2013-02-07T23:34:57.110 に答える
0

列の型を int に変更すると、最適なデータ ストレージとパフォーマンスが得られるため、最適なソリューションです。ただし、それができない場合は、次の回避策が可能です。

select * from foo order by seqid+0

これにより、order by column の int への型キャストが強制され、並べ替えは数値的に行われます。

于 2013-02-07T23:41:24.743 に答える
0

値を数値順に並べ替えるseriqには、列が数値列である必要があります。テキスト列の場合、値はcollat​​ionに従ってアルファベット順に並べ替えられます。例えば:

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;

フィドル

于 2013-02-07T23:38:07.703 に答える
0

簡単な解決策は、MySQL に ORDER BY 句で文字列を数値に変換させることです。

クエリを次のように変更します。

ORDER BY seriq+0 ASC

MySQL は任意の文字列を数値に変換しようとし、最初の「無効な」文字まで文字を読み取ろうとすることに注意してください。たとえば、'123A' は数値 123 に変換されます。

于 2013-02-07T23:39:21.287 に答える