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