REGEX_LIKE는 기존 SQL의 WHERE의 LIKE를 다중으로 사용할때 쓰여진다.
--다중 LIKE
SELECT *
FROM table
WHERE column1 LIKE 'text%'
OR column LIKE 'string%';
-- REGEXP_LIKE
SELECT *
FROM table
WHER REGEXP_LIKE(column, '^text|^string')
이러한 구문을 Mybatis에서 사용하게 될때 보통 List를 사용한 foreach 구문을 이용하는데
SELECT *
FROM table
WHER REGEXP_LIKE(column,
<foreach collection="list" item="item" open="'" close="'" separator="|" >
^${item.value}
</foreach>
)
예상한 SQL 구문은 아래와 같지만 작동은 하지 않았다.
SELECT *
FROM table
WHER REGEXP_LIKE(column,
'^value1|^value2|...'
)
로그를 보았을 때, foreach구문에서 whitespace가 들어가 (replace,' ','')를 사용하여도 결과는 0이 나오고 있었다.
로그상으로 나오는 SQL 구문에는 한계가 있기 때문에 whitespace만이 아닌 내가 원하지 않은 데이터는 전부 제거해줘 사용하였다.
SELECT *
FROM table
WHER REGEXP_LIKE(column,
REGEXP_REPLACE(
<foreach collection="list" item="item" open="'" close="'" separator="|" >
^${item.value}
</foreach>
,'([^0-9])','')
)
원하는 검색조건은 number이었기 때문에 0-9이외의 모든 값을
REGEXP_REPLACE로 제거하는 방법을 사용하였다.
REGEXP_REPLACE(target,'(변경할 대상 정규식)','변경값')