문자+숫자 형태의 코드(예: 'J23', 'A61')를 문자순, 숫자순으로 정렬하려면 LEFT()로 첫 글자, SUBSTR()로 나머지 숫자 부분을 분리해 정렬 키로 쓰세요.
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable (
-> Code VARCHAR(20)
-> );
Query OK, 0 rows affected (0.70 sec)
mysql> INSERT INTO DemoTable VALUES('J23');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES('C13');
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO DemoTable VALUES('A61');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES('D56');
Query OK, 1 row affected (0.11 sec)
정렬 전
mysql> SELECT * FROM DemoTable;
+------+ | Code | +------+ | J23 | | C13 | | A61 | | D56 | +------+ 4 rows in set (0.00 sec)
문자순, 숫자순 정렬
mysql> SELECT * FROM DemoTable
-> ORDER BY LEFT(Code, 1), CAST(SUBSTR(Code, 2) AS UNSIGNED);
+------+ | Code | +------+ | A61 | | C13 | | D56 | | J23 | +------+ 4 rows in set (0.05 sec)
해설: LEFT(Code,1)로 첫 문자(A, C, D, J)순 정렬, CAST(SUBSTR(Code,2) AS UNSIGNED)로 나머지 숫자 부분(61, 13, 56, 23)을 숫자로 변환해 2차 정렬. 문자열 정렬만 하면 'A61', 'C13', 'D56', 'J23' 순이지만, 숫자까지 고려하면 'C13'(13), 'D56'(56), 'J23'(23), 'A61'(61) 순이 됩니다. 위 쿼리는 1차: 문자, 2차: 숫자 순입니다.