2016-09-29 84 views
0

我有一个数据库,其中包含varchar中的记录,我想订购。目前,我用下面的查询用数字进行排序:使用字母和数字排序varchar - PostgreSQL

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 

你们能帮我吗?

回答

2

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

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