본문 바로가기

[MySql]문자열 섞인 숫자 정렬

가령 디비에 아래와 같이 들어가 있다고 치자.
table sample
name
 aa 1
 aa 2
 aa 3
 aa 4
 aa 5
 aa 6
 aa 7
 aa 8
 aa 9
 aa 10
 aa 11
 aa 12
 aa 13

순서대로 소트 할려면 쿼리가.
SELECT * FROM sample
ORDER BY aa
하면
 aa 1
 aa 10
 aa 11
 aa 12
 aa 13
으로 나열 해준다. 원하지 않는 결과지 않는가.
그래서 공백기준으로 잘라서 다시 해본다.

SELECT * FROM sample
ORDER BY (substring_index(name,' ',-1)

공백기준으로 뒷부분 다 짤라서 정렬하면
아래와 같이 나온다.
 aa 1
 aa 10
 aa 12
 aa 13

아무래도 형변환을 해서 해야 제대로 소트가 될거 같은데
그래서!

SELECT * FROM sample
ORDER BY(substring_index(name, ' ', -1) + 0)
을 해주면
  aa 1
  aa 2
  aa 3
  aa 4
  aa 5
  aa 6
  aa 7
  aa 8
  aa 9
  aa 10
  aa 11
처럼 순서대로 정렬해준다.