like 검색 특정조건 단어는 검색에서 제외시키기?? 0 4 1,251

by 란주 [SQL Query] [2020.10.13 07:08:34]


borad테이블의 content 필드에 있는 예제 데이터 인데요

방갑습니다. 테스트에요 good
<img src="/good/hello.png" />
감사합니다.

검색할때 문제입니다.
like검색 키워드는 good 입니다.
그런데 img 문자열 태그에 good 문자열까지 검색이 되요..
img 태그의 good은 검색에서 제외할 수 있을까요?

감사합니다.
 

by 란주 [2020.10.13 14:00:20]

해당 content 필드 정규식으로 이미지 태그를 공백으로 만들고 다시 selet 하였습니다.


by 우주민 [2020.10.13 15:45:41]

where replace(content,substr(content,instr(content,'<'), instr(content,'>') - instr(content,'<') + 1), '') like '%good%'

속도를 생각 안하고 결과만 나오게 억지로 만든 조건식 입니다.

< > 사이의 텍스트를 제외하고 like 문을 사용하는 형태입니다.

< 혹은 > 가 없다면 원하는 조건으로 조회되지 않습니다.


by 우주민 [2020.10.13 15:58:45]

where replace(content,substr(content,instr(content,'<'),decode(instr(content,'<'),0,0,instr(content,'>') - instr(content,'<') + 1)), '') like '%good%'

 

이렇게 하면 <, > 가 모두 있을 경우에만 사이 값을 빼도록 처리할 수 있네요.

다만 문자열에 해당 문자가 하나씩만 있을 경우 입니다.

 


by 마농 [2020.10.14 09:08:55]

img src 태그 하나만 있다면?
정규식이나 변환함수 등을 이용해 가능하긴 하지만
다른 태그들도 존재한다면? 전체 태그를 없애는 방법이 어떨까? 하네요.

WITH t AS
(
SELECT '방갑습니다. 테스트에요 good
 <img src="/good/hello.png" />
감사합니다.' contents
FROM dual
)
-- XML 형태로 바꾸어 태그를 제거한 문자만 추출하는 방법
SELECT *
  FROM (SELECT contents
             , SUBSTR(XMLTYPE('<root>' || contents || '</root>').EXTRACT('//text()'), 1) x
          FROM t
        )
 WHERE INSTR(x, 'good') > 0
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입