gpt4 book ai didi

mysql - 对多种类型的数字和字符进行排序

转载 作者:行者123 更新时间:2023-11-29 04:04:45 26 4
gpt4 key购买 nike

如何对具有不同数字和字符的表格进行排序。我表中的列是

res_no
------
B14
A6
C16
105 FF
114A
113
37
39A
91G
93
93(2)
A143B
A141
D154a
A141(25)
C40FF
D153(1)
E18A
D154
A51A
A50
E18A1

我想这样排序

res_no
------

37
39A
91G
93
93(2)
105FF
113
114A
A6
A50
A51A
A141
A141(25)
A143B
B14
C40FF
D153(1)
D154
D154A
E18A
E18A1

我试图ORDER BY:

REGEXP ('^[0-9]')
CAST(res_no AS UNSIGNED)
REGEXP_SUBSTR(res_no, '(^[a-zA-Z]+)|([a-zA-Z]$)')
CAST(REGEXP_SUBSTR(res_no, '(^[0-9]+)|([0-9]+$)') AS UNSIGNED

如何解决?对数字、字母数字值进行排序与​​上述代码完美配合,但括号内的值以及 A50、A51A 等值排序不正确。

最佳答案

此查询应该会为您提供所需的结果。查询顺序为 5 件事:

  1. 一组起始字母(如果不存在,这将为空,因此以数字开头的值将排在以字母开头的值之前);
  2. 字符串中的第一个数字(前面可以有字母);
  3. 字符串中的第二组字母(如果存在);
  4. 括在括号中的尾随数字(如果存在);
  5. 未括在括号中的尾随数字(如果存在)。
SELECT res_no
FROM table1
ORDER BY REGEXP_SUBSTR(res_no, '^[a-zA-Z]+'),
CAST(REGEXP_REPLACE(res_no, '^[a-zA-Z]*([0-9]+)', '\\1') AS UNSIGNED),
REGEXP_SUBSTR(res_no, '(?<=[0-9])[a-zA-Z]+'),
CAST(REGEXP_SUBSTR(res_no, '(?<=\\()[0-9]+(?=\\))') AS UNSIGNED),
CAST(REGEXP_SUBSTR(res_no, '[0-9]+$') AS UNSIGNED)

输出:

res_no
37
39A
91G
93
93(2)
105FF
113
114A
A6
A50
A51A
A141
A141(25)
A143B
B14
C16
C40FF
D153(1)
D154
D154a
E18A
E18A1

Demo on dbfiddle

关于mysql - 对多种类型的数字和字符进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com