개발/oracle DB

[ORACLE] LIKE 검색시 '%'나 '_'가 검색조건으로 들어갔을때 전체 LIST가 조회되는 오류 해결방안

smile-haha 2019. 10. 29. 16:56
반응형

WITH TEMP AS

(

    SELECT '제목 1' TITLE FROM DUAL 

    UNION ALL SELECT '제목 2' TITLE FROM DUAL

    UNION ALL SELECT '제목 3' TITLE FROM DUAL

    UNION ALL SELECT '제목 4' TITLE FROM DUAL

    UNION ALL SELECT '제목 5' TITLE FROM DUAL

)

SELECT 

    TITLE

FROM TEMP

WHERE 

    TITILE LIKE '%'||#검색조건#||'%'

 

위와 같은 쿼리를 짰을 경우, 검색조건에 '%' 또는 '_'이 들어올 경우,

조건절이     TITILE LIKE '%%%' 또는 TITILE LIKE '%_%' 이 되므로 전체 TITLE이 조회된다. 

 

이 문제를 해결하기 위해서 WHERE 절을 INSTR(TITLE,#검색조건#)>0

으로 변경하면, 처음 의도한 바와 같이 검색조건에 '%'나 '_'를 넣었을 경우에 해당 문자가 들어간 TITLE을 뽑아낼 수 있다.

 

여기서 INSTR은 [문자열 A]에서 [문자열 B]를 검색하여 해당 위치를 반환하는 ORACLE 내장 FUNCTION이다.

따라서 INSTR(TITLE,#검색조건#)>0 의 의미는 TITLE에 #검색조건# 값이 포함되있는지를 확인하는 것이라 할 수 있다.

 

     문법은 INSTR([문자열 A],[문자열 B],[비교를 시작할 위치], [검색된 결과의 순번]) 

     [비교를 시작할 위치] 값이 -1일 경우에는 뒤쪽에서 탐색하는 것

      [비교를 시작할 위치], [검색된 결과의 순번] 파라미터는 생략 가능하다

     [문자열 A]에서 [문자열 B]를 포함하지 않으면 0을 반환한다.

반응형

'개발 > oracle DB' 카테고리의 다른 글

[ORACLE] COUNT(칼럼명) VS COUNT(*) VS COUNT(1)  (0) 2019.11.04
[ORACLE] PACKAGE  (0) 2019.10.29
[ORACLE] JOB  (0) 2019.10.29
[oracle] WINDOW FUNCTION  (0) 2019.10.17
[oracle] DECODE 활용하기  (0) 2019.10.15