order by 질문 0 3 674

by 퇴근하고싶다 [Oracle 기초] [2019.12.06 09:42:30]


안녕하세요.

order by 질문드립니다..

테이블 : test

id 이름
test11 홍길동
test2 이순신
test10 김유신
test1 안중근

select *

from test

order by id

id순으로 정렬하여

id 이름
test1 홍길동
test2 이순신
test10 김유신
test11 안중근

이렇게 정렬하고 싶은데,,

id 이름
test1 홍길동
test10 이순신
test11 김유신
test2 안중근

이렇게 출력이 됩니다 ㅠㅠㅠ

by 마농 [2019.12.06 09:55:51]

숫자정렬이 아닌 문자정렬이라 그렇습니다.
즉, 테스트(십) 이 아닌 테스트(일일) 로 정렬되는 것입니다.
그런데 아이디가 항상 (문자 + 숫자) 형태일까요?
(문자) 형태?
(문자 + 숫자 + 문자) 형태?
(문자 + 숫자 + 문자 + 숫자) 형태?
(문자 + 숫자 + 문자 + 숫자 + 문자) 형태?
그 이상의 형태? 특수문자 포함 등등, 다양한 형태가 있을 듯 합니다.
위에 제시된 예만 보면 문자와 숫자로 분리하여 정렬하면 될 듯 하지만
다양한 형태가 존재한다면? 케이스별로 다른 기준이 적용될 수 있습니다.
혼합 형태의 경우엔 정렬 기준도 애매하구요.


by jkson [2019.12.06 10:16:10]
with t(id, nm) as
(
select 'test11',	'홍길동' from dual union all
select 'test2',	    '이순신' from dual union all
select 'test10',	'김유신' from dual union all
select 'test1',	    '안중근' from dual
)
select * 
from t
order by regexp_replace(id,'[0-9]'), to_number(regexp_replace(id,'[^0-9]'))

이렇게 하면 되겠지만 대량일 경우 인덱스에 의한 소트가 안 되어 소트 부하는 있을듯하네요.


by 우리집아찌 [2019.12.10 11:36:51]
order by to_number(translate(id,'0123456789'||id , '0123456789'))

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입