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;
내림차순도 성공!
'DATABASE' 카테고리의 다른 글
MSSQL 서버 최대 메모리 설정하기 / 메모리 할당 관련 (1) | 2022.02.17 |
---|---|
[MYSQL] HeidiSQL 사용하여 간단하게 csv파일 테이블로 import (0) | 2022.01.21 |
[MSSQL] 중복 데이터 삭제하기 (0) | 2021.11.10 |
[DB] cannot create poolableconnectionfactory 에러.log (0) | 2021.10.27 |
[MySQL] 여러 문자열를 하나의 문자열로 합치기 (CONCAT 함수) (0) | 2021.09.29 |
댓글