2016-09-29 9 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値になります。これらの行の順序は、すべてが同じ「値」で並べ替えられるため、未定義です。 2番目のソート基準としてname列を追加する必要があります。また、最初の式のNULL値が最後にソートされていることを確認することもできます。

ORDER BY NULLIF(regexp_replace(name, E'\\D', '', 'g'), '')::int NULLS LAST, name 
関連する問題