본문 바로가기
IT 실무/데이터베이스

숫자형과 문자형이 섞여 있을 때 order by 방법

by 아이들링 2019. 3. 17.

MySQL이든 MariaDB든 Oracle이든 마찬가지일 것 같다.


1,2,3,4,5,6,7,8,9,10,11,12 가 string 형태의 필드에 저장되어 있을 때 order by를 하면

1,11,12,2,3,4,5,6.. 이런식으로 정렬이 되어 버린다. 숫자가 아닌 문자를 기준으로 보자면 11보다 2가 더 크기 때문이다. 이럴 때 형변환(CAST)을 하여 사용하는 경우가 많은데 문제는 아래와 같은 경우이다.


1,2,3,4,5

A1, A2, A3

A1, B1, B2


이런 숫자와 문자들이 섞여 있는 경우. 예를어 앨범의 '트랙넘버' 필드 같은 경우가 저렇게 생겨먹을 수 있다.
(CD는 1,2,3,4로 가지만 테잎이나 LP는 앞뒤면을 나누기 위해 문자가 붙음)


이럴때 조금 복잡한 방법으로, zero padding을 앞에 넣어주는 경우가 있는데,

만약 필드수가 많지 않아 부하 걱정이 없다면 아래와 같이 해 주면 가장 편하다.


order by length(col),col

댓글0