-1

私の問題は、MySQL が数字の前に文字を注文することです。簡単な例を挙げると、データベースに次の文字列があります。

3, a, 2, 1, b

そして、ORDER BY ステートメントはこれを返します。

a, b, 1, 2, 3

しかし、私はそれが欲しい:

1, 2, 3, a, b

私のデータベースは ですがutf8_unicode_ci、それは役に立ちません。それでも間違った結果が生成されます。(項目が「2something」という名前である可能性があり、「asomething」の前にある必要があるため、それらが数字であるかどうかを確認してから一番上に並べ替えることができません)。何か案は?

編集:問題が見つかりました。(ユーザーを保存する) データベースで、私は で注文してCONCAT(name, login)おり、名前は でしたNULL。MySQL の注文はNULL常に一番上にあるため、文字が数字の一番上にありました (それらの名前フィールドは空の文字列でした)。

4

4 に答える 4

1

ORDER BY列タイプがまたはの場合、目的の方法で機能するはずcharacterですvarchar

于 2012-07-11T13:36:18.797 に答える
1

並べ替えフィールドに照合を適用する必要があります

試す

SELECT yourfield
FROM yourtable
ORDER BY yourfield COLLATE latin1_general_ci
于 2012-07-11T15:22:39.467 に答える
0

節で 試して結果を確認できますcastか?order by

order by cast( desired_field as char )
于 2012-07-11T14:12:04.277 に答える
0

これを行う:

SELECT id FROM example ORDER BY IF(id REGEXP '[0-9]+',id,CONCAT('0',id) )

これにより、文字の前に「0」が追加され、それによって順序付けられます。元の列を返します

于 2012-07-11T13:48:47.663 に答える