본문 바로가기
데이터/SQL

[MySQL] Order by 구문으로 숫자가 정렬되지 않을 때

by 찌노오 2022. 11. 16.

 

 

정수타입(int)의 데이터를 정렬할 때, order by 구문을 써도 컬럼이 정렬되지 않을 때가 있다.

해당 컬럼이 숫자로만 이루어져있다고 해도 데이터 형식이 varchar, 혹은 다른 형식이기 때문이다.

 

당연히 가격 컬럼은 int 타입일거라 생각했는데, 확인해보니 varchar 타입이었다.

 

 

두 가지 해결 방법이 있다.

① CAST 함수를 사용해 타입을 명시적으로 바꿔주는 방법

 SELECT id, product_name, unit, price
 FROM product
 ORDER BY CAST(price AS INT) ASC;

CAST함수를 사용해 형변환을 해주는데 INT 뿐만 아니라 FLOAT 도 된다.

 

 

② 묵시적 형변환

 SELECT id, product_name, unit, price
 FROM product
 ORDER BY price*1 ASC;

이 경우는 데이터 타입을 바꾸기 보다는 값이 변하지 않는 *1를 덧붙여, 숫자 타입이라는 걸 묵시적으로 선언해준다.

+0을 넣어줘도 같은 결과를 반환한다.

 

 

 

반응형

댓글