当前位置: 首页 > 面试题库 >

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

麹培
2023-03-14
问题内容

我想按下面显示的顺序对它们进行排序(数字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

问题答案:

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

  • MySQL中的字母数字排序
  • MySQL中的自然排序
  • 数字值与字母数字值混合排序
  • MySQL自然排序
  • MySQL中的自然排序

编辑:

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

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;

希望这可以帮助



 类似资料:
  • 问题内容: 我有一个混合数组,需要按字母然后按数字排序 我如何将其排序为: 我努力了 但这只是按字母顺序排序。可以使用直接的JavaScript或jQuery完成此操作吗? 问题答案:

  • 问题内容: myArray = [Step 6, Step 12, Step 5, Step 14, Step 4, Step 11, Step 16, Step 9, Step 3, Step 13, Step 8, Step 2, Step 10, Step 7, Step 1, Step 15] 如何以这种方式在上面对这个数组排序? 我很快使用了此功能,但它是按这种方式排序的 问题答案: 另

  • 问题内容: 我有下表: 我要订购这样的产品ID(从最小到最大): 这是我尝试过的方法,但是不起作用: 我该怎么做呢? 以及如何获得最大的product_id?我试过了,但是没有用: 问题答案: 尝试执行以下查询以按预期顺序获取结果。 小提琴演示

  • 问题内容: 我有一个包含数字的字符串列表,但找不到找到对它们进行排序的好方法。 例如,我得到这样的东西: 用的方法。 我知道我可能需要以某种方式提取数字,然后对列表进行排序,但是我不知道如何以最简单的方式进行操作。 问题答案: 也许您正在寻找人工排序(也称为自然排序): 产量 PS。我已经更改了答案,以使用Toothy的自然排序实现(在此处发表评论),因为它比我的原始答案快得多。 如果您希望使用浮

  • 我有一个日期,显示两个人之间的数字联系。其中一些人没有任何联系,所以有些单元格可能有一个字符串“x”作为值。 我得到的问题是排序。如果我按列排序,数字只按第一位数字排序,而不按点前面的部分排序。 我将点设置为十进制分隔符,如下所示: 下面是从控制台输出中获取的数据的摘录: 再次显示一个屏幕截图,解释错误的排序: 这里表格是按列leonard排序的,你可以看到这是按第一位数字排序的。但它应该是:94

  • 问题内容: 在Chrome 14和Firefox 5(尚未测试其他浏览器)中,以下代码无法正确对数字进行排序: 返回10,100,20,30,60 我尝试了不同的数字,它总是像没有出现0一样,否则会正确地对数字进行排序。有人知道为什么吗? 问题答案: 我尝试了不同的数字,它总是像没有出现0一样,否则会正确地对数字进行排序。有人知道为什么吗? 您正在按字典顺序进行排序(例如,将对象转换为字符串,然后