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