MyBatis의 Mapper foreach와 REGEXP_LIKE 사용법 (Foreach 공백 처리)

H_wall·2021년 11월 24일
0

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,'(변경할 대상 정규식)','변경값')

0개의 댓글