102

データベースで、値が 1 ~ 999 の数値列で並べ替えようとしています。

私が使うとき

ORDER_BY registration_no ASC

わかった…。

1
101
102
103
104
105
106
107
108
109
11
110
Etc…

そのため、数字ではなく最初の桁で注文しているようです。

これを値で注文したい場合、どのSQLを使用すればよいか知っている人はいますか? など1,2,3,4,5,6など

4

8 に答える 8

161

として格納されている場合、正の整数で並べ替える 1 つの方法はvarchar、最初に長さ、次に値で並べ替えることです。

order by len(registration_no), registration_no

これは、列に数値以外の値が含まれる可能性がある場合に特に役立ちます。

注: 一部のデータベースでは、文字列の長さを取得する関数が のlength()代わりに呼び出される場合がありlen()ます。

于 2013-05-13T11:23:42.173 に答える
70
ORDER_BY cast(registration_no as unsigned) ASC

値を数値に明示的に変換します。同じことを達成する別の可能性は

ORDER_BY registration_no + 0 ASC

これにより、暗黙の会話が強制されます。

実際には、テーブル定義を確認して変更する必要があります。intこのようにデータ型を変更できます

ALTER TABLE your_table MODIFY COLUMN registration_no int;
于 2013-05-13T10:19:17.500 に答える
14

SQL Server を使用している場合:

ORDER_BY cast(registration_no as int) ASC
于 2015-04-03T19:17:33.107 に答える
2

あなたの列のタイプはSTRING(CHAR、VARCHARなど)で、ソート手順はそれを文字列としてソートしていると思います。あなたがする必要があるのは、値を数値に変換することです。その方法は、使用する SQL システムによって異なります。

于 2013-05-13T10:20:32.580 に答える
1

私はデータに対して「PAD」を行うことを好みます。MySql ではこれを LPAD と呼んでいますが、SQL Server で同じことを行う方法を回避できます。

ORDER BY  REPLACE(STR(ColName, 3), SPACE(1), '0') 

この数式は、列の長さ 3 に基づいて先行ゼロを提供します。この機能は、ORDER BY 以外の状況で非常に役立つため、このオプションを提供したいと考えました。

結果: 1 は 001 になり、10 は 010 になりますが、100 は変わりません。

于 2016-08-19T17:41:30.100 に答える