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

MySQL에서 슬래시로 구분된 문자열의 중간 부분 추출하기

개요

MySQL에서 '/101/102/106'처럼 슬래시(/)로 구분된 문자열이 저장되어 있을 때, 그중 가운데 값만 추출하고 싶은 경우가 있습니다. 이때 SUBSTRING_INDEX 함수를 두 번 중첩하여 사용하면 간단하게 해결할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 알아보겠습니다.

1. 테이블 생성

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Code varchar(100)
-> );
Query OK, 0 rows affected (1.07 sec)

2. 데이터 삽입

INSERT 명령을 사용해 슬래시로 구분된 샘플 데이터를 입력합니다.

mysql> insert into DemoTable values('/101/102/106');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('/110/111/101');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('/111/114/201');
Query OK, 1 row affected (0.47 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+--------------+
| Code |
+--------------+
| /101/102/106 |
| /110/111/101 |
| /111/114/201 |
+--------------+
3 rows in set (0.00 sec)

4. 슬래시 사이의 중간 문자열 추출 쿼리

슬래시로 둘러싸인 가운데 문자열을 가져오는 쿼리는 다음과 같습니다.

mysql> select SUBSTRING_INDEX(SUBSTRING_INDEX(Code,'/',3),'/',-1) from DemoTable;

출력 결과

쿼리 실행 결과, 각 행에서 두 번째 위치에 있는 값이 정상적으로 추출됩니다.

+-----------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX(Code,'/',3),'/',-1) |
+-----------------------------------------------------+
| 102 |
| 111 |
| 114 |
+-----------------------------------------------------+
3 rows in set (0.00 sec)

SUBSTRING_INDEX 동작 원리

이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.

  • SUBSTRING_INDEX(Code, '/', 3) : 문자열에서 세 번째 슬래시 앞까지의 부분을 반환합니다. 예를 들어 '/101/102/106'은 '/101/102'가 됩니다.
  • SUBSTRING_INDEX(결과값, '/', -1) : 앞 단계의 결과에서 마지막 슬래시 뒤에 있는 부분을 반환하므로 최종적으로 '102'라는 중간 값을 얻게 됩니다.

이처럼 SUBSTRING_INDEX 함수를 중첩하면 별도의 복잡한 파싱 로직 없이도 구분자로 나뉜 문자열에서 원하는 위치의 값을 손쉽게 추출할 수 있습니다.