一尘不染

MySQL'Order By'-正确排序字母数字

mysql

我想按下面显示的顺序对它们进行排序(数字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
534克
G46A
100B
100A
100JE

等等....

谢谢!

更新:人们要求查询

select * from table order by name asc

阅读 1487

收藏
2020-05-17

共1个答案

一尘不染

人们使用不同的技巧来做到这一点。我搜索了一下,发现每个结果都遵循不同的技巧。看看他们:

编辑:

我刚刚为以后的访问者添加了每个链接的代码。

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 |
| test3 | 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;

希望这可以帮助

2020-05-17