본문 바로가기

Server Oriented/DB-Oracle

오라클 like 검색시 * 나 _ 를 사용하는 경우 escape 키워드 사용

DB 테이블 tableA 의 칼럼 columnA 에 'a_bcdef' 와 'b_bcdef' 가 들어 있는데,

앞에 있는 글자는 무엇이 와도 되지만 두번째 글자에는 '_' 가 들어가야 할 때 어떻게 쿼리해야 할까..?


select from tableA

 where columnA like '_#_%' escape '#'

;


이렇게 하면 무슨 뜻일까..? '_' 는 어떤 단어든 하나를 대체한다는 의미에서 '?' 검색과 동일하고,

'%' 는 문자나 수량에 상관없다는 의미에서 '*' 검색과 동일.

따라서 상기 쿼리에서,

첫번째 '_' 는 어떤 문자든이라는 의미에서 '?' 검색..

두번째의 # 은 escpae '#' 에 의해서 쿼리가 실제 동작할 때 '_#_%' 에서 '#' 을 빼라는 의미인데,

그 다음 문자인 세번째 '_' 는 '?' 검색이 아니라 그냥 문자라고 검색용 키워드가 아니라 단순 문자 처리.

네번째 '%' 는 보통의 like 검색에 사용되는 '*' 검색..


where columnA like '%#_%' escape '#' 라고 하면,

첫번째 '%' 에 의해 앞에는 무슨 문자든 수량에 상관없이 검색하되,

두번째/세번째 '#_' 에 의해 '_' 를 '?' 가 아닌 순수한 문자 '_' 로 보아 언더바가 들어가야 하고,

네번째 '%' 에 의해 뒤에 아무렇게나 오면 된다는 것.

따라서 '_' 가 들어가 있는 것이면 무엇이든지 검색해내는 쿼리.


그렇다면, '#' 만 사용되는 것일까..? 아니다 '@' 를 사용해도 된다.. ^^;