MySQL에서 쉼표로 구분된 목록의 첫 번째 요소 추출하기
쉼표(,)로 구분된 목록(CSV 값)에서 첫 번째 요소만 추출하고 싶다면 MySQL의 SUBSTRING_INDEX() 함수를 사용하면 간단하게 해결할 수 있습니다. 이 함수는 지정한 구분자를 기준으로 문자열을 잘라 원하는 부분만 반환해 줍니다.
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
CSV_Value varchar(200)
);
Query OK, 0 rows affected (0.81 sec)
다음은 INSERT 문을 사용해 테이블에 데이터를 삽입하는 쿼리입니다. 여기서는 쉼표로 구분된 정수 목록 형태의 값을 저장했습니다.
mysql> insert into DemoTable values('10,20,50,80');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('100,21,51,43');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('1,56,103,1090');
Query OK, 1 row affected (0.26 sec)
SELECT 문으로 테이블에 저장된 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------+ | CSV_Value | +---------------+ | 10,20,50,80 | | 100,21,51,43 | | 1,56,103,1090 | +---------------+ 3 rows in set (0.00 sec)
SUBSTRING_INDEX()로 첫 번째 요소 선택하기
쉼표로 구분된 목록에서 첫 번째 요소를 가져오려면 아래와 같이 SUBSTRING_INDEX() 함수를 사용합니다. 세 번째 인자로 1을 전달하면 첫 번째 구분자 앞까지의 문자열, 즉 첫 번째 요소가 반환됩니다.
mysql> select SUBSTRING_INDEX(CSV_Value,',',1) AS FIRST_ELEMENT from DemoTable;
실행 결과는 다음과 같습니다. 각 행의 목록에서 첫 번째 요소만 출력된 것을 확인할 수 있습니다.
+---------------+ | FIRST_ELEMENT | +---------------+ | 10 | | 100 | | 1 | +---------------+ 3 rows in set (0.03 sec)
참고: SUBSTRING_INDEX(문자열, 구분자, count) 형식으로 사용하며, count가 양수이면 왼쪽(앞)에서부터, 음수이면 오른쪽(뒤)에서부터 해당 위치 앞까지의 문자열을 반환합니다. 예를 들어 목록의 마지막 요소를 얻고 싶다면 count 자리에 -1을 넣으면 됩니다.