Database/Oracle
[오라클] CLOB 컬럼 값 replace 하는 법
데브포유
2022. 7. 7. 22:57
반응형
오라클에서는 VARCHAR2 타입으로 최대 4000 byte 까지만 저장할 수 있습니다.
4000 byte가 넘는 문자열을 저장하기 위해서는 CLOB 타입으로 컬럼을 생성해야 하죠.
4000 byte가 넘는 데이터에서 특정 문자열을 찾아 치환(replace)하고 싶을 때 어떻게 해야 할까요?
저장된 값이 4000 byte 이하라면 아래와 같이 replace() 함수를 사용할 수도 있습니다.
EX) BIG_TEXT 컬럼에서 '대한민국' 문자열을 찾아 'KOREA'로 변경
SELECT TO_CLOB(REPLACE(TO_CHAR(BIG_TEXT), '대한민국','KOREA'))
FROM T_TABLE
저장된 값이 4000 byte가 넘는다면, 정규 표현식 함수 'REGEXP_REPLACE()'를 사용하면 됩니다.
EX) BIG_TEXT 컬럼에서 '대한민국' 문자열을 찾아 'KOREA'로 변경
SELECT REGEXP_REPLAC(BIG_TEXT, '대한민국','KOREA')
FROM T_TABLE
REGEXP_REPLACE() 함수는 정규 표현식을 사용할 수 있기 때문에 쓰임새도 더 많습니다.
가령 CLOB 타입의 CONTENTS라는 컬럼예 'HTML' 문서가 저장되어 있을 때 HTML에서 특정 이미지가 있는 <IMG> 턔그를
지워야 할 경우에도 쉽게 처리할 수 있습니다.
CREATE TABLE t_table
(
contents CLOB
);
INSERT INTO t_table VALUES('<html> <body> <img src=''a.jpg''/></body></html>');
SELECT contents
,REGEXP_REPLACE(contents,'<img(.*?)a.jpg(.*?)/>' , '')
FROM t_table
반응형