정수타입(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을 넣어줘도 같은 결과를 반환한다.
반응형
'데이터 > SQL' 카테고리의 다른 글
[MySQL] 변수값으로 where절 필터를 설정하는 동적쿼리 (0) | 2023.05.16 |
---|---|
[MySQL] ST_DISTANCE_SPHERE 함수를 활용하여 거리/반경 구하기 (0) | 2023.05.05 |
[MySQL] 정규 표현식(instr(), like(), replace(), substr()) (0) | 2022.10.31 |
[MySQL] 없는 시간 표시하기(재귀적 CTE) (0) | 2022.10.26 |
[MySQL] 날짜 형식/포맷 변환 함수- DATE_FORMAT (0) | 2022.10.20 |
댓글