我有一个存储在表格中的房间内的位置列表。它们大多被命名为A1,A2,... A16,B1,B2,...... B16,C1 ......
在查询此列表时,如何对结果进行排序,以便将字母按顺序与数字分组?
显然SELECT name FROM Shelves ORDER BY name
无法正常工作,因为它会返回A1,A10,... A16,A2。
FROM Location ORDER BY LENGTH(name)
也不起作用,因为A,B,C,等等不再分组。
编辑:
并非所有位置名称都是单个字符后跟数字,还有安全1,安全2,安全3,货币1,货币2 ......(房间内保险箱内的货架)。
A1等没有空格,但安全1,货币1等等。
答案 0 :(得分:1)
使用正则表达式将名称与数字分开
SELECT *
FROM Shelves
ORDER BY
regexp_replace(name , '[^a-zA-Z]*', '', 'g') ,
regexp_replace(name , '[^0-9]*', '', 'g')::INT
答案 1 :(得分:0)
这应该有效...
SELECT name FROM Shelves ORDER BY name ASC