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