2016-09-29 78 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