2026, 새로운 도약을 시작합니다.

mysql 컬럼 특정 태그 사이만 변경 채택완료

안녕하세요.

mysql에서

test라는 테이블 안에 free 라는 컬럼이 있습니다.

free 컬럼 내용에서 특정 태그 <div>와 </div> 사이의 모든 문자를 원하는 문자열로 업데이트 하려고 합니다.

---------------------------------------------

테스트 입니다. 테스트 입니다.

<div>안녕하세요. <b>안녕하세요</b>안녕하세요. 안녕하세요.</div>

테스트 입니다.테스트 입니다.

--------------------------------

아래와 같은 결과를 얻고 싶은데요.

테스트 입니다. 테스트 입니다.

<div>변경 되었습니다.</div>

테스트 입니다.테스트 입니다.

답변 2개

채택된 답변
+20 포인트
Copy


-- 테이블 생성

CREATE TABLE `item` (

  `itemno` int(11) NOT NULL,

  `itemname` text

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Copy


-- 데이터 생성

INSERT INTO `item` VALUES 

     ( 1, '장갑')

    ,( 2, '모자')

    ,( 3, '토시')

    ,( 4, '신발')

    ,( 5, '안경')

    ,( 6, '안녕하세요. 안녕하세요안녕하세요. 안녕하세요.')

    ,( 7, '안녕하세요안녕하세요. 안녕하세요.')

    ,( 8, '안녕하세요안녕하세요. 안녕하세요.')

    ,( 9, '안녕하세요. 안녕하세요.')

    ,(10, '안녕하세요.')

    ,(11, '안녕하세요.')

    ,(12, '안녕하세요.안녕하세요.')

    ,(13, 'abc안녕하세요.안녕하세요.def')

    ,(14, 'ㄱ안녕하세요.안녕하세요.쀍')

    ,(15, '12345');

SELECT * FROM item;

/*

+--------+-------------------------------------------------------------------------------------+

| itemno | itemname                                                                            |

+--------+-------------------------------------------------------------------------------------+

|      1 | 장갑                                                                                |

|      2 | 모자                                                                                |

|      3 | 토시                                                                                |

|      4 | 신발                                                                                |

|      5 | 안경                                                                                |

|      6 | 안녕하세요. 안녕하세요안녕하세요. 안녕하세요.                     |

|      7 | 안녕하세요안녕하세요. 안녕하세요.                                      |

|      8 | 안녕하세요안녕하세요. 안녕하세요.                                         |

|      9 | 안녕하세요. 안녕하세요.                                                   |

|     10 | 안녕하세요.                                                              |

|     11 | 안녕하세요.                                                                  |

|     12 | 안녕하세요.안녕하세요.                          |

|     13 | abc안녕하세요.안녕하세요.def                    |

|     14 | ㄱ안녕하세요.안녕하세요.쀍                      |

|     15 | 12345                                                                    |

+--------+-------------------------------------------------------------------------------------+

15 rows in set (0.00 sec)

*/

Copy


-- 데이터 확인

SELECT *, 

     INSTR(itemname, '') c_begin 

    ,INSTR(REVERSE(itemname), '>vid/vid/
Copy


-- 업데이트

START TRANSACTION;

UPDATE item SET 

    itemname = CONCAT(

         SUBSTR(itemname, 1, INSTR(itemname, '') - 1) -- c_head 

        ,'변경 되었습니다.'

        ,SUBSTR(itemname, 0 - INSTR(REVERSE(itemname), '>vid/
로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

답변 정말 감사합니다.
아래처럼 해봤는데 업데이트가 안되네요. 어디가 문제일까요?;;

$sql = " UPDATE name SET post = CONCAT(SUBSTR(post, 1, INSTR(post, '<div>') - 1) -- c_head ,'<div>변경 되었습니다.</div>' ,SUBSTR(post, 0 - INSTR(REVERSE(post), '>vid/<') + 1) -- c_tail) WHERE post REGEXP '<div>.+</div>' ID = '734' ";
-- c_head, -- c_tail
이 구문은 SQL 의 한줄주석 입니다.
쿼리문이 개행문자를 포함하지 않을때는 /* c_head */ 처럼 사용해야 하거나 아예 빼버리는게 낫습니다.

댓글을 작성하려면 로그인이 필요합니다.

정규식이용해서 한번 테스트해봤는데요

응용해서 사용해보시면 되지 않으까 합니다.

SELECT REGEXP_REPLACE(itemname, '<div>.+</div>$', '<div>변경 되었습니다.</div>') FROM `item`;

UPDATE item SET itemname = REGEXP_REPLACE(itemname, '<div>.+</div>$', '<div>변경 되었습니다.</div>');

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

답변 감사합니다. mysql은 거의 처음이라서 뭐가 뭔지 잘 모르겠네요.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고