用字母和数字对 varchar 进行排序 - PostgreSQL

Sort varchar with letters and numbers - PostgreSQL

我有一个数据库,其中包含我想要订购的 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

你们能帮帮我吗?

没有数字的值都会导致 ORDER BY 的 NULL 值。这些行的顺序未定义,因为它们都具有相同的 "value" 进行排序。您需要添加 name 列作为第二个排序条件。您可能还想确保第一个表达式的 NULL 值排在末尾:

ORDER BY NULLIF(regexp_replace(name, E'\D', '', 'g'), '')::int NULLS LAST, name