2017-02-20 1 views
0

정렬 할 문자열 열을 반환하는 쿼리가 있습니다. ASC/DESC로 정렬 할 때 동일한 결과가 나타납니다. 다음은 출력 예입니다SQL 문자열로 정렬, 숫자가 마지막으로 나타납니다.

AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 
1200165 
120186 
120186 
120186 
120032 

하지만 알파벳 문자열 전에 번호를 사용할 것. ASC에 대한 예를 들어 :

VSEStaging 
Shlomi 
Secure East 
ksky site 
AVI 
120032 

나는 현재과 같이 정규식 사용 :

1200165 
120186 
120186 
120186 
120032 
AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 

DESC에 대한 예를 들어

REGEXP_SUBSTR(UPPER(COLUMN_NAME), '^\D*') , 
TO_NUMBER(REGEXP_SUBSTR(UPPER(COLUMN_NAME), '\d+')) 

은 지원하시기 바랍니다.

+0

체크 아웃 ** [이 링크의 마지막 대답 (https://asktom.oracle.com/pls/apex 오름차순 정렬을 위해/f? p = 100 : 11 : 0 :::: P11_QUESTION_ID : 9522557800346940016) ** –

+0

제공되는 솔루션은 ASC에는 적합하지만 DESC에는 적합합니다. –

+0

모든 문자열이 100 % 자릿수 (다른 문자 없음) 또는 100 % 문자 (다른 문자 없음)라는 가정 중 하나입니까? 그것이 보장되지 않는다면, 다음을 명확히 할 필요가 있습니다 :'123abcd' 문자열을 어떻게 주문해야합니까? 어떨까요?'#! -'- 주문에 어디에 해당해야합니까? 등 – mathguy

답변

4

regexp_like()을 사용할 수 있습니다. 당신은이 같은 뭔가 다른 것을 시도 할 수

order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc, 
     col asc 
+0

DESC는 어떻게됩니까? –

+0

@DavidFaiz - 이것은 ASC와 DESC에서 작동하며, 마지막 단어를'asc'에서'desc'로 변경합니다 (첫 번째 코드 행은 건드리지 말고 두 번째 코드 만 터치하십시오). 이 문자열은 문자열이 (1) 100 % 자릿수이고 (2) 다른 모든 문자열이라고 가정합니다. 원본 게시물 아래의 내 댓글/질문을 참조하십시오 (설명을 위해). – mathguy

+0

@DavidFaiz - 'asc'와 'desc'둘 다 변경하려고 했습니까? –

0

:

order by translate(upper(col), '1234567890', 'abcdefghij') 
관련 문제