반응형
LIKE CONCAT( , , ) : 검색 기능으로 많이 씀.
SELECT *
FROM {bo_table}
WHERE wr_is_comment = 0
<if test="sfl != null and sfl != ''">
AND ${sfl} LIKE CONCAT('%', #{stx}, '%')
</if>
<if test="bo_notice != null and bo_notice != ''">
AND wr_id NOT IN(${bo_notice})
</if>
<if test="flag != null and flag != ''">
AND CONVERT(VARCHAR(8000), wr_6) = #{flag}
</if>
만약 sfl에 해당하는 열의 값과 stx의 검색어가 조금이라도 유사성을 지닌 것을 추출하고 싶다면, SQL 쿼리에서 LIKE 연산자를 사용하여 유사한 문자열을 찾을 수 있습니다. 아래는 해당 부분을 수정한 쿼리 예시입니다:
<if test="sfl != null and sfl != ''">
<choose>
<when test="sfl == 'wr_subject' or sfl == 'wr_name'">
AND ${sfl} = #{stx}
</when>
<otherwise>
AND ${sfl} LIKE CONCAT('%', #{stx}, '%')
</otherwise>
</choose>
</if>
위의 코드는 다음과 같은 방식으로 작동합니다:
sfl이 wr_subject 또는 wr_name과 같다면, 해당 열의 값과 stx의 검색어가 정확히 일치하는 조건으로 필터링됩니다.
그 외의 경우, LIKE 연산자와 CONCAT('%', #{stx}, '%')를 사용하여 sfl 열의 값과 stx의 검색어가 유사한 값을 가지는 조건으로 필터링됩니다.
이렇게 하면 sfl 열이 wr_subject나 wr_name이 아닌 경우에도 유사한 값을 검색할 수 있습니다.
반응형