Database/MyBatis
MyBatis - 대소문자 구분 없이 데이터 조회하기
임빈영
2022. 3. 24. 17:06
대소문자 구분 없이 데이터 조회
기존의 코드
<when test="indexNameKeyword != '' and elementIdKeyword != ''">
SELECT
<include refid="dataColumns"/>
FROM TBL_XBR_IDX_CALC
WHERE (INDX_NM LIKE '%' || #{indexNameKeyword} || '%'
${searchType} TRGT_ELMT_ID LIKE '%' || #{elementIdKeyword} || '%')
ORDER BY INDX_SEQ, CACL_ORD
</when>
사용자로부터 검색어를 입력받아 해당 검색어를 포함하고 있는 데이터를 출력하는 쿼리문이다.
테스트 결과 대소문자를 구분하여 데이터를 조회한다는 문제점을 파악하고, 위 쿼리문을 대소문자 구분 없이 데이터를 조회할 수 있는 쿼리문으로 변경하기 위한 작업을 시작했다.
lower, upper의 이용
LOWER(column_name) LIKE ('%' || LOWER(#{parameter}) || '%')
UPPER(column_name) LIKE ('%' || UPPER(#{parameter}) || '%')
where 절에 like로 검색 조건을 줄 경우 대소문자를 구분하게 되는데, 위 코드처럼 lower 또는 upper를 사용하면 대소문자 구분 없이 검색이 가능하다.
코드 변경
<when test="indexNameKeyword != '' and elementIdKeyword != ''">
SELECT
<include refid="dataColumns"/>
FROM TBL_XBR_IDX_CALC
WHERE (INDX_NM LIKE '%' || #{indexNameKeyword} || '%'
${searchType} LOWER(TRGT_ELMT_ID) LIKE '%' || LOWER(#{elementIdKeyword}) || '%')
ORDER BY INDX_SEQ, CACL_ORD
</when>
검색 조건이 되는 속성과 사용자로부터 입력받은 검색 키워드를 lower로 감싸서, 대소문자의 구분 없이 데이터를 출력할 수 있도록 쿼리문을 변경하였다.
728x90