[Oracle] 오라클 숫자 정렬 오류 해결 방법 (문자형 컬럼)
- 데이터베이스/오라클
- 2020. 6. 17.
오라클 쿼리에서 숫자 값을 정렬(ORDER BY) 하였는데 뒤죽박죽 순서가 섞여서 조회되는 경우가 있다. 이런 경우는 대부분 컬럼 타입이 문자형(VARCHAR)인 경우가 많다.
숫자형 문자 컬럼인 경우 컬럼의 값을 TO_NUMBER 함수를 사용하여 숫자 타입으로 변경하거나, LPAD 함수를 사용하여 숫자 앞에 컬럼의 길이만큼 "0"을 붙여서 조회하면 된다.
TO_NUMBER( ) 함수를 사용하는 방법 (컬럼의 값이 모두 숫자인 경우 사용)
SELECT *
FROM dept
ORDER BY TO_NUMBER(dept_id)
LPAD( ) 함수를 사용하는 방법 (컬럼의 값이 숫자 + 문자인 경우 사용)
SELECT *
FROM dept
ORDER BY LPAD(dept_id, 3, '0')
- 컬럼의 길이만 큼 앞자리를 "0" 으로 채운다 (dept_id 컬럼 길이는 "3")
컬럼 타입이 문자형(VARCHAR)인경우 문자의 첫번째 자리를 우선으로 정렬된다
dept_id 컬럼은 VARCHAR2(3)인 것을 확인할 수 있다
사용 예제
예제 1 - TO_NUMBER( ) 함수를 사용하면 숫자가 올바르게 정렬된다
예제 2 - LPAD( ) 함수를 사용하여 컬럼의 길이만큼 "0" 으로 채우면 순서데로 조회된다
예제 3 - TO_NUMBER( ) 함수를 사용할 때 숫자가 아닌 값이 있으면 오류가 발생하며, 이럴때는 LPAD( ) 함수를 사용한다
- ORA-01722: invalid number