Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 영숫자 문자열의 숫자 부분만 기준으로 정렬하는 방법

영숫자(alphanumeric) 문자열이 저장된 컬럼에서 숫자 부분만을 기준으로 정렬하고 싶다면, ORDER BY 절과 함께 RIGHT() 함수를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1948
    (
    StudentCode varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2단계: 샘플 데이터 삽입

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable1948 values('121John_567');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Adam_101');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Bob_563');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Sam_346');
Query OK, 1 row affected (0.00 sec)

3단계: 저장된 데이터 확인

SELECT 문을 실행하여 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1948;

실행 결과는 다음과 같습니다.

+-------------+
| StudentCode |
+-------------+
| 121John_567 |
| Adam_101    |
| Bob_563     |
| Sam_346     |
+-------------+
4 rows in set (0.00 sec)

숫자 부분만 기준으로 정렬하는 쿼리

RIGHT() 함수는 문자열의 오른쪽 끝에서부터 지정한 개수만큼의 문자를 반환합니다. 따라서 RIGHT(StudentCode, 3)을 사용하면 각 코드의 마지막 3자리, 즉 숫자 부분만 추출할 수 있고, 이 값을 ORDER BY에 적용하면 숫자를 기준으로 정렬됩니다.

mysql> select * from DemoTable1948
    order by RIGHT(StudentCode,3);

실행 결과는 다음과 같습니다.

+-------------+
| StudentCode |
+-------------+
| Adam_101    |
| Sam_346     |
| Bob_563     |
| 121John_567 |
+-------------+
4 rows in set (0.00 sec)

결과를 보면 이름이 아닌 끝자리 숫자(101 → 346 → 563 → 567)를 기준으로 오름차순 정렬된 것을 확인할 수 있습니다.

참고: 더 유연한 방법

RIGHT() 함수는 숫자 자릿수가 항상 일정할 때 유용합니다. 만약 숫자의 길이가 제각각이라면 MySQL 8.0 이상에서 제공하는 REGEXP_SUBSTR() 함수나 SUBSTRING_INDEX()를 조합하여 원하는 위치의 숫자를 추출한 뒤 정렬하는 방법도 고려해볼 수 있습니다.