본문 바로가기

DataBase

DB 에서 유사성이 있는 단어 검색 하는 query CONCAT

반응형

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이 아닌 경우에도 유사한 값을 검색할 수 있습니다.

반응형