SQL - LIKE 조건에 와일드카드 문자 자체를 검색에 포함하기

반응형

개요

테이블에 다음과 같은 데이터가 존재한다.

테이블 예시 데이터
테이블 예시 데이터

  • 1, 'eunbyeol'
  • 2, 'e_nbyeol'
  • 3, 'e__byeol'

 

나는 'e_nbyeol' 데이터를 like 키워드로 조회하고 싶다.

SELECT * FROM t1 WHERE name LIKE 'e_nbyeol'

 

하지만 위와 같이 쿼리를 작성하면 원하는 데이터가 조회되지 않는다.

LIKE 조회 결과 화면
LIKE 조회 결과 화면

 

생각해 보니 '_' 문자열은 와일드카드 문자열로 모든 문자를 대체한다.

때문에 다음과 같이 쿼리를 작성하면 예시 데이터의 모든 데이터가 조회된다.

SELECT * FROM t1 WHERE name LIKE 'e_%'

LIKE 조회 결과 화면
LIKE 조회 결과 화면

 

와일드카드 문자열을 포함하여 문자열을 찾으려면 어떻게 해야 할까?

이 글은 와일드카드 문자를 검색하기 위해 작성되었다.


LIKE 조건자 ESCAPE 구문

설명

LIKE 조건절에 ESCAPE 구문을 사용하여 모든 문자를 표현할 수 있다.

와일드카드 문자나 이스케이프 문자를 사용할 때 발생할 수 있는 혼동을 방지할 수 있다.

이스케이프 문자는 일반적으로 백슬래시(\)를 사용한다.

즉, 와일드카드 문자인 '%' 혹은 '_' 등을 원본 문자열로 표현할 수 있다는 것이다.

 

구문

SELECT
	*
FROM
	t1
WHERE
	name LIKE '\abc' {escape '\'} -- {} 중괄호는 생략해도 무방
  • 데이터가 '\abc'인 문자를 조회한다.

 

사용 방법 및 예시(샘플) 쿼리

다음 데이터에서 'e_nbyeol' 데이터 조회하기

  • 1, 'eunbyeol'
  • 2, 'e_nbyeol'
  • 3, 'e__byeol'
SELECT
	*
FROM
	t1
WHERE
	name LIKE 'e\_nbyeol%' escape '\'

LIKE 조건에 와일드카드 문자 포함 검색 결과
LIKE 조건에 와일드카드 문자 포함 검색 결과

  • 만약 이스케이프 구문이 없다면, 와일드카드 문자로 인해 'eunbyeol', 'e_nbyeol' 데이터가 조회된다.

 

데이터에서 'e_ _byeol' 데이터 조회하기

SELECT
	*
FROM
	t1
WHERE
	name LIKE 'e\_\_byeol%' escape '\'

LIKE 조건에 와일드카드 문자 2개 포함 검색 결과
LIKE 조건에 와일드카드 문자 2개 포함 검색 결과

  • 만약 이스케이프 구문이 없다면, 와일드카드 문자로 인해 'eunbyeol', 'e_nbyeol', 'e_ _byeol' 모든 데이터가 조회된다.

편법 사용하기 (replace)

조회해야 할 문자 조건이 많을 경우,

일일이 LIKE 검색을 OR 연산시켜서 쿼리를 작성하기는 솔직히 너무 귀찮다.

그럴 경우에는 IN 구문을 사용하여 한꺼번에 처리하기 위해 편법을 사용하였다.

REPLACE로 특정 문자열로 바꿔서 찾아보는 방법도 나쁘지 않다.

단, 와일드카드를 다른 문자열로 변경할 경우,

다른 데이터와 데이터 중복이 되진 않은지 확인해 보고 사용하는 것을 추천한다.

 

[찾는 문자열 예시]

  • 1_1
  • 1_2
  • 1_3
SELECT
	col1
FROM
	t1
WHERE
	REPLACE(col1, '_', '-') IN ('1-1', '1-2', '1-3')
반응형