MySQL에서 쉼표(,)로 구분되어 저장된 문자열 데이터의 각 값을 작은따옴표(')로 감싸야 하는 경우가 종종 있습니다. 예를 들어 'John,Bob'과 같은 값을 'John','Bob' 형태로 변환해야 할 때, CONCAT() 함수와 REPLACE() 함수를 조합하면 간단하게 해결할 수 있습니다.
1. 테이블 생성하기
먼저 데모용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1407
-> (
-> Name text
-> );
Query OK, 0 rows affected (0.51 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용하여 쉼표로 구분된 값들을 테이블에 삽입합니다.
mysql> insert into DemoTable1407 values('John,Bob');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1407 values('Carol,David,Adam');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1407 values('Mike,Sam,Chris');
Query OK, 1 row affected (0.19 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1407;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------------+
| Name |
+------------------+
| John,Bob |
| Carol,David,Adam |
| Mike,Sam,Chris |
+------------------+
3 rows in set (0.00 sec)
4. 따옴표를 포함하도록 변환하는 쿼리
이제 핵심 부분입니다. 아래 쿼리는 REPLACE()로 쉼표를 ','(작은따옴표-쉼표-작은따옴표)로 치환한 뒤, CONCAT()으로 문자열 앞뒤에 작은따옴표를 붙여 각 값을 개별적으로 감싸줍니다.
mysql> select concat("'", replace(Name, ",", "','"), "'") AS IncludingQuotes from DemoTable1407;위 쿼리는 다음과 같은 결과를 출력합니다.
+------------------------+
| IncludingQuotes |
+------------------------+
| 'John','Bob' |
| 'Carol','David','Adam' |
| 'Mike','Sam','Chris' |
+------------------------+
3 rows in set (0.00 sec)
동작 원리 정리
이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.
1단계: replace(Name, ",", "','") — 문자열 내의 모든 쉼표를 ','로 교체합니다. 예를 들어 John,Bob은 John','Bob이 됩니다.
2단계: concat("'", ..., "'") — 변환된 문자열의 맨 앞과 맨 뒤에 작은따옴표를 추가하여 최종적으로 'John','Bob' 형태를 완성합니다.
이 기법은 특히 IN 절에 동적으로 값을 전달하거나, CSV 형태로 저장된 데이터를 SQL 문자열 목록으로 변환할 때 매우 유용하게 활용됩니다.