MySQL 필드에서 부분 데이터 삭제하기
컬럼의 전체 값이 아니라 일부 문자열만 삭제하고 싶다면 UPDATE 명령과 REPLACE() 함수를 함께 사용하면 됩니다. REPLACE()는 문자열 안에서 지정한 부분 문자열을 찾아 다른 문자열로 치환하는 MySQL 내장 함수로, 세 번째 인자에 빈 문자열('')을 넣으면 해당 부분을 사실상 삭제하는 효과를 얻을 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1583
-> (
-> GameDetails text
-> );
Query OK, 0 rows affected (1.38 sec)
insert 명령으로 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1583 values('<GameName>=Candy</GameName>,<GamePrice>2000</GamePrice>');
Query OK, 1 row affected (0.53 sec)
mysql> insert into DemoTable1583 values('<GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice>');
Query OK, 1 row affected (0.25 sec)select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1583;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------------------------------------------------------+
| GameDetails |
+------------------------------------------------------------+
| <GameName>=Candy</GameName>,<GamePrice>2000</GamePrice> |
| <GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice> |
+------------------------------------------------------------+
2 rows in set (0.00 sec)
부분 데이터 삭제 쿼리 실행
이제 필드에서 특정 부분만 삭제하는 핵심 쿼리입니다. REPLACE() 함수를 사용해 '<GameName>=Candy</GameName>' 문자열을 빈 문자열로 치환합니다.
mysql> update DemoTable1583 set GameDetails=replace(GameDetails,'<GameName>=Candy</GameName>','');
Query OK, 1 row affected (0.38 sec)
Rows matched: 2 Changed: 1 Warnings: 0
변경된 결과를 확인하기 위해 테이블 레코드를 다시 조회해 보겠습니다.
mysql> select * from DemoTable1583;
실행 결과는 다음과 같습니다.
+------------------------------------------------------------+
| GameDetails |
+------------------------------------------------------------+
| ,<GamePrice>2000</GamePrice> |
| <GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice> |
+------------------------------------------------------------+
2 rows in set (0.00 sec)
결과 분석 및 참고 사항
출력 결과를 보면 첫 번째 행에서 '<GameName>=Candy</GameName>' 부분이 제거되고 ',<GamePrice>2000</GamePrice>'만 남은 것을 확인할 수 있습니다. 이처럼 UPDATE와 REPLACE()를 조합하면 전체 데이터를 지우지 않고도 원하는 부분 문자열만 손쉽게 제거할 수 있습니다.
REPLACE() 함수의 기본 문법은 다음과 같습니다.
REPLACE(컬럼명, '찾을_문자열', '바꿀_문자열')
참고로 위 예제에서는 삭제 후 앞에 콤마(,)가 남게 되는데, 만약 이런 잔여 구분자까지 깔끔하게 정리하고 싶다면 TRIM() 함수나 추가적인 REPLACE() 호출을 조합하여 처리할 수 있습니다. 또한 REPLACE()는 해당 컬럼의 모든 행에서 일치하는 문자열을 찾아 치환하므로, 특정 행만 대상으로 하려면 WHERE 절을 함께 사용하는 것이 좋습니다.