MySQL에서 쉼표(,)로 구분된 데이터가 저장된 하나의 열을 두 개의 열로 나누려면 substring_index() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 잘라내어 원하는 부분만 반환해 주기 때문에, 이름과 성처럼 쉼표로 묶여 있는 값을 손쉽게 분리할 때 매우 유용합니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
테이블 생성
mysql> create table demo79
-> (
-> fullname varchar(50)
-> );
Query OK, 0 rows affected (0.64 sec)
insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
데이터 삽입
mysql> insert into demo79 values("John,Smith");
Query OK, 1 row affected (0.09 sec)
mysql> insert into demo79 values("David,Miller");
Query OK, 1 row affected (0.11 sec)
mysql> insert into demo79 values("Chris,Brown");
Query OK, 1 row affected (0.07 sec)select 문을 사용하여 테이블에 저장된 레코드를 확인합니다.
데이터 조회
mysql> select *from demo79;
위 쿼리는 다음과 같은 결과를 출력합니다.
출력 결과
+--------------+
| fullname |
+--------------+
| John,Smith |
| David,Miller |
| Chris,Brown |
+--------------+
3 rows in set (0.00 sec)
다음은 쉼표를 구분자로 사용하여 하나의 열을 두 개의 열로 분리하는 쿼리입니다. substring_index()의 세 번째 인자에 양수를 넣으면 왼쪽부터, 음수를 넣으면 오른쪽부터 해당 위치까지의 문자열을 반환한다는 점을 기억하세요.
열 분리 쿼리
mysql> select
-> fullname,
-> substring_index(fullname, ',', 1) First_Name,
-> substring_index(fullname, ',', -1) Last_Name
-> from demo79;
위 쿼리는 다음과 같은 결과를 출력합니다.
출력 결과
+--------------+------------+-----------+
| fullname | First_Name | Last_Name |
+--------------+------------+-----------+
| John,Smith | John | Smith |
| David,Miller | David | Miller |
| Chris,Brown | Chris | Brown |
+--------------+------------+-----------+
3 rows in set (0.00 sec)
실행 결과를 보면 쉼표 앞부분은 First_Name 열로, 뒷부분은 Last_Name 열로 성공적으로 분리된 것을 확인할 수 있습니다. 이처럼 substring_index() 함수를 활용하면 별도의 복잡한 처리 없이도 구분자로 나뉜 값을 간단하게 여러 열로 나눌 수 있습니다.