Introduction

지금까지는 WHERE 로 필터링 할 때, 값이 같은지 다른지만으로 필터링 했다. 만약 문자열을 이런식으로 검색한다면, 정말 힘들게 될 것이다. 왜냐하면 문자열 이란것은 복수의 정보를 담고 있기 때문이다. 잉 "서울시 대치동" 이라는 문자열에 시 와 동의 정보가 함께 들어 있는 것을 볼수 있다.

그러므로 패턴검색을 할 수 없다면, 노가다성 작업이 훨씬 많이 늘어나게 되어 힘들어 질 것이다. 이번 장에선 문자열을 패턴으로 검색 할 수 있는 방법을 알려 준다.

Content

문자열을 패턴으로 검색하기 위해선 LIKE 절을 사용하며, LIKE 절 에서 "와일드 카드 문자"를 이용하여 패턴 검색을 지시한다.

와일드 카드 문자란 무엇인가?

문자열 패턴을 정의할 때 사용 되는 문자를 뜻한다. SQL에선 %, _, [] 이렇게 3가지가 있다.
자세한건 검색 : 구글 검색 결과

그러면 패턴은 무엇인가?

말로 표현하려니 어렵다. 틀이 반복 하는 것. 이라고 하면 되겠다. : ) 그러면 이제부터 하나씩 정리해 보자.

1. 와일드 카드 문자 %를 사용 하는 방법(때론 %가 * 일 수 있다. 대부분 % 를 사용하나 특정 DB 에선 *를 사용한다.)

LIKE 절에서 % 문자는 어떠한 문자도 0개 이상 있다는 것 을 의미한다. 즉 LIKE '%' 라면 모든 문자, 문자열을 의미하고 LIKE 'Fish%' 는 Fish로 시작하는 모든 문자열을, '%Fish' 는 Fish로 끝나는 모든 문자열, '%Fish%' 는 Fish를 포함한 모든 문자열을 의미한다.

SQL 문으로 만들면 다음과 같다.

1-1 특정 문자열로 시작하는 문자열 찾기


이 의미는 Fish로 시작하는 열이 있는 모든 레코드 선택을 의미한다. 결과는 다음과 같다.


1-2 특정 문자를 포함하는 문자열 찾기


이 의미는 bea를 포함하는 열이 있는 모든 레코드 선택을 의미한다. 결과는 다음과 같다.


1-3 특정 문자로 끝나는 문자열 찾기


이 의미는 toy로 끝나는 열이 있는 모든 레코드 선택을 의미한다. 결과는 다음과 같다.



1-4 특정 문자로 시작해 특정 문자로 끝나는 문자열 찾기


이 의미는 F 로 시작하고 y로 끝나는 열이 있는 모든 레코드 선택을 의미한다. 결과는 다음과 같다.


여기서 주의 해야 할점

1-3 과 1-4 에 결과가 보이지 않는데, 그 이유는 문자열 필드가 "character 255개"로 구성 되어 있기 때문에, 문자열을 기록하고 남은 뒷 공간은 공백으로 기록된다. 그러므로 문자열의 끝은 공백이다. 공백을 잘르는 방법은 뒷장에서 배우므로, 일단 이렇게 되서 출력이 안된다고만 알아 두자.

또한 % 는 무척 많은 연산을 하므로, 꼭 써야 할 때만 쓰는게 좋다.

2. 언더스코어( _ ) 사용 방법(다른 DB에선 ?를 대신 사용 할 수 있다.)

언더 스코어는 어떠한 문자든 1개가 있다는 것을 의미한다. 복수의 문자 말고, 단일 문자만 비교하고자 할 때 사용 한다. 말 보단 사용 방법과 그림 한장이 더 좋겠다.


이 의미는 두개의 문자로 시작하며, ' inch teddy bear' 로 끝나는 문자열을 선택한다는 것이다. 결과는 다음과 같다.


(실제로 하면 안나올 수 있다. 이때는 %를 맨 뒤에 붙여 주기 바란다.)

3. 와일드 카드 문자 [ ] 를 사용 하는 방법

[ ] 는 문자들 모음을 정의할 때 사용 한다. 문자들 모음은 LIKE 절에서 1개의 문자와 같다. 주의해야 할 사항으로는 모든 DB가 지원하는 것은 아니므로, 설명서를 DBMS 매뉴얼을 참조 하라.


참고

postgresql 에서 [ ]는 되지 않는다. SIMILAR TO 절을 추가하여 사용 한다. 그러므로 postgresql 에선 다음처럼 바뀌여야 한다.


자세한 내용은 http://www.postgresql.org/docs/8.4/static/index.html 에서 확인해야 한다.(영어라 압박이 심하다)



와일드 카드 문자 사용시 팁이 될 만한 사항들

1. 와일드 카드 문자를 사용해 패턴을 검색하는 것은 다른것에 비해서 상대적으로 매우 느리다.

2. 와일드 카드로 시작하는 문자열을 찾기 보다는 다른 대안을 먼저 찾아 보라. 왜냐하면 이게 제일 느리기 때문이다.

Digression

Postgresql 8.4 에 [ ] 처리가 있을 꺼 같은데 못찾겠다.  SIMILA TO 로 사용 가능하다. 이런 절로 이루어진 비교는 NOT 을 사용하면 쉽게 부정할 수 있다는 것을 알게 되었다.



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기