对包含数字的 VARCHAR 进行排序

Ordering VARCHARs that contain numbers

我在 table 中存储了一个房间内的位置列表。他们大多被命名为A1,A2,...A16,B1,B2,...B16,C1...

在查询此列表时,我将如何对结果进行排序,以便字母与数字按顺序分组?

显然 SELECT name FROM Shelves ORDER BY name 不起作用,因为它 returns A1, A10, ... A16, A2.

FROM Location ORDER BY LENGTH(name) 也不起作用,因为 A、B、C 等不再分组。

编辑:

不是所有的位置名称都是单个字符后跟数字,还有保险箱 1、保险箱 2、保险箱 3、货币 1、货币 2...(房间内保险箱内的架子)。

A1 等没有 space,但 Safe 1、Currency 1 等有。

这应该有效...
SELECT name FROM Shelves ORDER BY name ASC

使用正则表达式将姓名与数字分开

SELECT *
FROM Shelves  
ORDER BY
regexp_replace(name , '[^a-zA-Z]*', '', 'g') ,
regexp_replace(name , '[^0-9]*', '', 'g')::INT