Inverse sorting of numeric characters

반응형

개념


숫자(INT)형 문자(varchar)를 기준으로 정렬하게 되면 원하는 대로 되지 않는다.

바아로~ 해결 해봅시다.

 

 

문법


문법에 들어가기 앞서, 공통 테이블 예시

CREATE TABLE orderEx (

id INT PRIMARY KEY AUTO_INCREMENT,
varcharId VARCHAR(64),
textId TEXT(64)

)

INSERT INTO orderex VALUES(1,'col1','1');

INSERT INTO orderex (varcharId,textId) VALUES('col2','2');
INSERT INTO orderex (varcharId,textId) VALUES('col3','3');
INSERT INTO orderex (varcharId,textId) VALUES('col4','4');
INSERT INTO orderex (varcharId,textId) VALUES('col5','5');
INSERT INTO orderex (varcharId,textId) VALUES('col6','6');
INSERT INTO orderex (varcharId,textId) VALUES('col7','7');
INSERT INTO orderex (varcharId,textId) VALUES('col8','8');
INSERT INTO orderex (varcharId,textId) VALUES('col9','9');
INSERT INTO orderex (varcharId,textId) VALUES('col10','10');
INSERT INTO orderex (varcharId,textId) VALUES('col11','11');
INSERT INTO orderex (varcharId,textId) VALUES('col12','12');

예시 테이블 orderex

만약 varcharId 컬럼 기준으로 ORDER BY를 하게 되면 결과는 이렇다.

SELECT * FROM orderex ORDER BY varcharId 

결과 

이와 같이 개 같은 결과가 나온다.(물론 textId의 ORDER BY 결과도 동일하다)

 

 

해결


정렬(오름차순)

SELECT * FROM orderex ORDER BY varcharId*1

결과

 

만약 역 정렬하고 싶다면?

역 정렬(내림차순)

SELECT * FROM orderex ORDER BY length(varcharId) desc,varcharId desc

결과

 

예제 파일 제공


[MariaDB] varchar ORDER BY.sql
0.00MB

반응형

+ Recent posts