我有一个数据库,其中包含我要订购的varchar中的记录。目前,我使用以下查询按数字排序:
SELECT name
FROM table
ORDER BY
NULLIF(regexp_replace(name, E'\\D', '', 'g'), '')::int
正确排序混合记录(数字+字母),但只有字母的记录未正确排序:
Query Results:
name:
1st guy
2nd guy
3rd guy
10th guy
11th guy
v guy
a guy
z guy
c guy
虽然我想要的结果是:
Query Results:
name:
1st guy
2nd guy
3rd guy
10th guy
11th guy
a guy
c guy
v guy
z guy
你们能帮助我吗?
答案 0 :(得分:2)
没有数字的值都会导致ORDER BY
的NULL值。这些行的顺序是未定义的,因为它们都具有相同的“值”以进行排序。您需要添加name
列作为第二个排序条件。您可能还希望确保第一个表达式中的NULL值在结尾处排序:
ORDER BY NULLIF(regexp_replace(name, E'\\D', '', 'g'), '')::int NULLS LAST, name