[Oracle] LIKE _ % 문자 ESCAPE 를 통해 와일드카드를 문자 그대로 해석하기 , LIKE %(percent sign) _(underscore) escape literal

LIKE _ % 문자 ESCAPE 를 통해 와일드카드를 문자 그대로 해석하기

이번 주제는 와일드카드( _ 문자, % 문자 )를 문자 그대로 해석하기 입니다.

오라클에서 LIKE 는 _ 문자와 % 문자가 특수한 의미를 가집니다.

  • _(underscore) : 어떠한 문자든 관계 없이 특정한 하나의 문자
  • %(percent sign) : 0 혹은 그 이상의 문자(NULL 제외)

그런데 실제로 _ 나 % 를 문자 그대로 해석하고 싶을 때가 있을 것입니다.
이때 사용 하는 것이 ESCAPE 구문입니다.
[ ESCAPE '\' ] 를 추가하시면 선행하는 '\' 이후 문자가 그대로 해석이 됩니다.

예시에서 [ LIKE '%A\_B%' ESCAPE '\' ] 는
%<특정 아무 문자(없어도 됨)> + A + _문자 + B + %<특정 아무 문자(없어도 됨)>
를 조회합니다.

ESCAPE 다음에 '\' 문자는 '$' 와 같은 다른 문자로 대체하셔도 괜찮습니다만
보통 '\' 문자를 이스케이프로 쓰는 경향이 많으니 관습상 '\' 쓰시는 것을 추천해드립니다.

아래는 예시 자료입니다.

WITH TA AS
(
    SELECT 'A_B' C FROM DUAL UNION ALL
    SELECT 'A\B' FROM DUAL UNION ALL
    SELECT '_%AB' FROM DUAL UNION ALL
    SELECT '_A\B' FROM DUAL UNION ALL
    SELECT '\A_B' FROM DUAL UNION ALL
    SELECT '%A_B' FROM DUAL UNION ALL
    SELECT '%AA' FROM DUAL UNION ALL
    SELECT '_A\CB' FROM DUAL    
)
SELECT '--------ALL--------' EXAMPLE FROM DUAL UNION ALL
SELECT * FROM TA UNION ALL
SELECT '--------LIKE--------' FROM DUAL UNION ALL
SELECT * FROM TA WHERE C LIKE '%A\_B%' UNION ALL
SELECT '--------LIKE ESCAPE--------' FROM DUAL UNION ALL
SELECT * FROM TA WHERE C LIKE '%A\_B%' ESCAPE '\'
;

댓글