对包含数字的 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
我在 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