데이터가 숫자인 문자형타입 컬럼 정렬방법

컬럼의 타입은 문자형이다. 문자형 타입에는 어떤 데이터값이라도 들어올 수 있다. 이런 컬럼으로 정렬(order by)를 하는 경우가 있는데 어떻게 보면 테이블 설계가 잘못 됐다고 볼 수 있다. 원래 해당 컬럼의 숫자데이터로 정렬할 목적이였다면 숫자타입으로 컬럼을 만들어야 한다. 이런 상황에서 정렬을 해보면 잘되는것 처럼 보이지만 10단위에서 문제가 생긴다. 즉 오름차순일 경우 아래와 같이 정렬된다.

1
10
2
26
276483
3
...

숫자가 아닌 문자이기때문에 순서대로 정렬되지 않는다.

해결방법

Oracle

ORDER BY TO_NUMBER(ORD)

MySQL

ORDER BY ORD + 0

Oracle에서는 문자형을 숫자형으로 변환해주는 함수를 사용해 숫자정렬을 한것이고 MySQL은 단순히 숫자를 더해 문자형을 숫자형을 형변환하여 정렬시킨다. MySQL에도 문자형을 숫자형으로 형변환해주는 CAST()라는 함수가 있지만 위 방법이 간결해 보인다.

comments powered by Disqus