如何对字母数字值进行排序?

问题描述 投票:0回答:1

我有一个表格和一些示例数据:

CREATE TABLE alphanumeric
(
       alphanum varchar
);

INSERT INTO alphanumeric VALUES
('1'),
('A1'),
('A2'),
('A11'),
('2'),
('AB1'),
('AB2'),
('AB11'),
('11'),
('C3'),
('C4'),
('C33'),
('111');

现在我想按字母数字排序:

1
2
11
111
A1
A2
A11
AB1
AB2
AB11
C3
C4
C33

但是当我尝试时:

SELECT alphanum
FROM alphanumeric
ORDER BY alphanum;

这不是我期望的结果:

1
11
111 
2 <-
A1
A11 <-
A2
AB1
AB11 <-
AB2
C3
C33 <-
C4

我该怎么办?如果有人可以提供帮助,我们将不胜感激。(顺便说一句, 我使用的数据库支持大部分PostgreSQL语法,所以你也可以使用PostgreSQL进行演示)

sql pieclouddb
1个回答
0
投票

我们可以使用正则表达式首先按前导字母排序,然后是尾随数字:

SELECT alphanum
FROM alphanumeric
ORDER BY
    SUBSTRING(alphanum FROM '^[A-Z]+'),
    SUBSTRING(alphanum FROM '[0-9]+$')::int;
© www.soinside.com 2019 - 2024. All rights reserved.