1. ホーム
  2. mysql

[解決済み] MySQL 'Order By' - 英数字を正しくソートする。

2023-06-07 08:41:31

質問

以下のデータ項目を表示順(1~12番)に並べ替えたい。

1
2
3
4
5
6
7
8
9
10
11
12

しかし、私のクエリでは order by xxxxx asc を使用している私のクエリは、何よりも最初の桁でソートします。

1
10
11
12
2
3
4
5
6
7
8
9

もっと正しくソートするためのコツはありますか?

さらに、完全な情報公開のために、これは文字と数字の混合である可能性があります(今はそうではありませんが)、例えば。

A1
534G
G46A
100B
100A
100JE

etc....

ありがとうございました。

更新:クエリを要求する人々

select * from table order by name asc

どのように解決するのですか?

人々はこれを行うには、さまざまなトリックを使用します。私はグーグル、それぞれ異なるトリックに従ういくつかの結果を見つける。それらを参照してください。

編集する。

私はちょうど将来の訪問者のために各リンクのコードを追加しました。

MySQL でのアルファベット順の並べ替え

与えられた入力

1A 1a 10A 9B 21C 1C 1D

期待される出力

1A 1C 1D 1a 9B 10A 21C

クエリ

Bin Way
===================================
SELECT 
tbl_column, 
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC

-----------------------

Cast Way
===================================
SELECT 
tbl_column, 
CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC

MySQLの自然なソート

与えられた入力

表:sorting_test
 -------------------------- -------------
| 英数字 VARCHAR(75) | 整数 INT
 -------------------------- -------------
| test1 | 1
| test12 | 2
| test13 | 3
| test2 | 4
| テスト3|5
 -------------------------- -------------

期待される出力

 -------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
 -------------------------- -------------
| test1                    | 1           |
| test2                    | 4           |
| test3                    | 5           |
| test12                   | 2           |
| test13                   | 3           |
 -------------------------- -------------

クエリ

SELECT alphanumeric, integer
       FROM sorting_test
       ORDER BY LENGTH(alphanumeric), alphanumeric  

数値と英数字が混在する場合の並び替え

与えられた入力

2a, 12, 5b, 5a, 10, 11, 1, 4b

期待される出力

1, 2a, 4b, 5a, 5b, 10, 11, 12

クエリ

SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;

これが役に立つといいのですが