MySQL varchar타입에 order by를 써야하는 경우
페이지 정보
본문
varchar는 문자열을 받을때 쓰는것이므로 order by가 원하는대로 되지 않습니다.
해결 방법은 해당 컬럼을 숫자로 변환해서 order by를 하면 원하는 순서대로 정렬할 수 있습니다.
1. cast함수를 활용한 형변환
CAST 함수를 이용하여 명시적으로 변환하는 방법입니다..
이때 DECIMAL 함수도 같이 사용합니다.
ex) order by cast(wr_5 as decimal( 3, 0)) desc
deciaml을 쓸때 앞은 자릿수, 뒤에는 소수점 자릿수
2. 묵시적인 형변환
함수를 사용하여 명시적으로 형 변환하는 것이 아닌 묵시적으로 형 변환하는 방법입니다.
varchar 컬럼에 + 연산자를 이용하여 암묵적인 형 변환을 합니다.
ex) order by wr_5+0 desc
3. 숫자와 문자가 혼재된 경우
order by codename asc
+-------------------+
| name |
+-------------------+
| 1.면 |
| 10.O |
| 11.마 |
| 12.브 |
| 2.린 |
| 3.의 |
| 4.계 |
| 5.방 |
| 6.커 |
| 7.누 |
| 8.패 |
| 9.부 |
+-------------------+
order by codename *1 asc
+-------------------+
| codename |
+-------------------+
| 1.면 |
| 2.린 |
| 3.의 |
| 4.계 |
| 5.방 |
| 6.커 |
| 7.누 |
| 8.패 |
| 9.부 |
| 10.O |
| 11.마 |
| 12.브 |
+-------------------+
참고자료
https://devshoveling.tistory.com/entry/varchar타입에-order-by를-써야하는-경우
https://madplay.github.io/post/mysql-sort-varchar-as-float#google_vignette
https://www.daylife.co.kr/139
해결 방법은 해당 컬럼을 숫자로 변환해서 order by를 하면 원하는 순서대로 정렬할 수 있습니다.
1. cast함수를 활용한 형변환
CAST 함수를 이용하여 명시적으로 변환하는 방법입니다..
이때 DECIMAL 함수도 같이 사용합니다.
ex) order by cast(wr_5 as decimal( 3, 0)) desc
deciaml을 쓸때 앞은 자릿수, 뒤에는 소수점 자릿수
2. 묵시적인 형변환
함수를 사용하여 명시적으로 형 변환하는 것이 아닌 묵시적으로 형 변환하는 방법입니다.
varchar 컬럼에 + 연산자를 이용하여 암묵적인 형 변환을 합니다.
ex) order by wr_5+0 desc
3. 숫자와 문자가 혼재된 경우
order by codename asc
+-------------------+
| name |
+-------------------+
| 1.면 |
| 10.O |
| 11.마 |
| 12.브 |
| 2.린 |
| 3.의 |
| 4.계 |
| 5.방 |
| 6.커 |
| 7.누 |
| 8.패 |
| 9.부 |
+-------------------+
order by codename *1 asc
+-------------------+
| codename |
+-------------------+
| 1.면 |
| 2.린 |
| 3.의 |
| 4.계 |
| 5.방 |
| 6.커 |
| 7.누 |
| 8.패 |
| 9.부 |
| 10.O |
| 11.마 |
| 12.브 |
+-------------------+
참고자료
https://devshoveling.tistory.com/entry/varchar타입에-order-by를-써야하는-경우
https://madplay.github.io/post/mysql-sort-varchar-as-float#google_vignette
https://www.daylife.co.kr/139
댓글목록
등록된 댓글이 없습니다.