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

MySQL에서 쉼표로 구분된 열의 각 값에 따옴표를 추가하는 방법

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,BobJohn','Bob이 됩니다.
2단계: concat("'", ..., "'") — 변환된 문자열의 맨 앞과 맨 뒤에 작은따옴표를 추가하여 최종적으로 'John','Bob' 형태를 완성합니다.

이 기법은 특히 IN 절에 동적으로 값을 전달하거나, CSV 형태로 저장된 데이터를 SQL 문자열 목록으로 변환할 때 매우 유용하게 활용됩니다.