订购包含数字的VARCHAR

时间:2015-08-07 16:45:05

标签: hibernate postgresql natural-sort

我有一个存储在表格中的房间内的位置列表。它们大多被命名为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等等。

2 个答案:

答案 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