DATABASE

[MySQL] 문자로 된 숫자 정렬

예나부기 2021. 12. 20.

String 형태로 되어있는 숫자 (정확히는 문자+숫자컬럼이었다) 컬럼을 정렬할 때,

그냥 ORDER BY 컬럼명 실행 시 문자열 자리수에 맞추어 정렬을 실행하기 때문에

 위와 같이 정렬이 되는 현상이 발생한다.

 

이럴 때는, 해당 문자열을 LENGTH() 함수를 사용하여 길이를 반환 후, 그 길이로 정렬을 수행하고,

그 후에 안의 값으로 정렬을 실행한다.

무슨 말이냐면,

테스트1 부터 테스트9까지 글자수 = 4,

테스트10부터 테스트99까지 글자수 = 5,

테스트100부터 테스트999까지 글자수 = 6 이니까 먼저 글자수인 4,5,6 순으로 정렬하고,

그 각자 글자수 안에서 정렬을 수행한다.

 

EX) username 컬럼이 '테스트{1}' 부터 '테스트{11}' 과 같이 늘어날 때

SELECT * FROM 테이블명 ORDER BY length(username),username;

해주면 정상적으로 정렬됨을 확인가능

내가 원하는건 내림차순이였는데,

무지성으로  실행하니 아래와 같이 나온다.

SELECT * FROM 테이블명 ORDER BY length(username) desc ,username;

length(컬럼명) desc, 컬럼명; 으로 실행하면 문자열 길이가 내림차순 된 뒤, 같은 길이 안에서 오름차순이 실행되는것이다. 그렇다면 문자열 길이 내림차순 한 뒤 같은 길이 안에서도 내림차순 해 주기 위해 아래와 같이 적용해본다.

SELECT * FROM 테이블명 ORDER BY length(username) desc,username desc;

내림차순도 성공!

 

댓글