select * from ... where 절에서 가장 많이 쓰이는 연산자 중의 하나는 바로 "LIKE" 문일 것이다.
Like 문을 이용해서 '%문자열%' 원하는 문자열이 포함되어 있는 컬럼을 쉽고 간편하게 검색할 수 있다.
그러나!! 우리가 많이 쓰는 Like 문에도 헛점이 있다.
위와 같은 테이블이 있을 경우에 다음과 같은 test5에 해당하는 문장을 선택하기 위하여 다음의 쿼리를 질의 하였다.
WHERE Context LIKE '%test5%'
결과는 우리가 예상한데로 다음과 같이 출력되었다.
이쯤 되면, "어라? 제대로 잘되는데 뭐가 문제라는 거야?" 라고 반문하시는 분들도 계실것이고, 다음의 문제점을 미리 예측하신 분들도 계실것 입니다.
자 그럼 문제의 쿼리로 넘어가 볼까요?
WHERE Context LIKE '[test5%'
분명히 LIKE 문 다음에 '[test5' 이후에 일치하는 모든 결과를 보여줘!! 라고 질의했습니다.
결과는 다음과 같습니다.
엥? 결과가 하나도 안나오네 -_-; 뭐지? 뭘 잘못한거지? 이렇게 당황하셨다면 SQL 도움말에서 like문을 찾아보세요.
와일드카드 문자 | 설명 | 예제 |
---|---|---|
% | 문자가 0개 이상인 문자열 | WHERE title LIKE '%computer%'는 책 제목에 'computer' 단어가 있는 모든 책 제목을 찾습니다. |
_ (밑줄) | 단일 문자 | WHERE au_fname LIKE '_ean'은 ean으로 끝나는 모든 4문자 이름을 찾습니다(Dean, Sean 등). |
[ ] | 지정된 범위([a-f]) 또는 집합([abcdef])에 있는 단일 문자 | WHERE au_lname LIKE '[C-P]arsen'은 arsen으로 끝나고 C와 P 사이의 단일 문자로 시작하는 저자의 성을 찾습니다. 예를 들면, Carsen, Larsen, Karsen 등입니다. |
[^] | 지정된 범위([^a-f]) 또는 집합([^abcdef])에 없는 단일 문자 | WHERE au_lname LIKE 'de[^l]%'은 de로 시작하고 그 다음에 오는 문자가 l이 아닌 저자의 성을 모두 찾습니다. |
와일드 카드 문자를 주목해서 보시면 눈치 빠르신 분들은 아! 저거였구나! 하실 것 입니다.
문제는 바로 "[" 문자가 와일드카드 문자였다는 것입니다.
만약 질의문을 다음과 같이 했다면 문제가 없었겠지만, 우리는 like 연산자를 이용하여 질의를 하였습니다.
WHERE Context = '[test5]'
LIKE 연산자가 대괄호로 시작되는 첫번째 문장을 지정된 범위 또는 집합을 선택하는 와일드카드로 인식했던 것이었습니다.
따라서 DB 내용 입력시 첫번째 문자열은 되도록 특수기호를 피하여 입력하는 것이 좋겠습니다. ^^
그래도 "나는 Like 문으로 꼭 '['로 시작하는 context를 검색하고 말테야!"라고 혈서로 맹세하시는 분들을 위해서 다음의 방법을 알려드립니다.
WHERE Context LIKE '[[]test5%'
[ 와일드카드 문자 ] <- 이와 같이 와일드카드 문자를 대괄호로 양쪽에서 감싸주시면 해결됩니다.
꼭 [[] 이런식으로 검색하는 사람이 있다면
그사람은 변태일거에요
'오라클' 카테고리의 다른 글
여러가지 Join 예제 (0) | 2014.03.03 |
---|---|
Join (0) | 2014.03.03 |
오라클 (DBMS)설치된 컴퓨터에서 다른 컴퓨터로 네트워크 접속시 (0) | 2013.11.17 |
오라클 날짜 입력 출력 (0) | 2013.09.26 |
오라클에서 WHERE 조건절에서 제외하기 (0) | 2013.09.24 |