반응형
개요
테이블에 다음과 같은 데이터가 존재한다.
- 1, 'eunbyeol'
- 2, 'e_nbyeol'
- 3, 'e__byeol'
나는 'e_nbyeol' 데이터를 like 키워드로 조회하고 싶다.
SELECT * FROM t1 WHERE name LIKE 'e_nbyeol'
하지만 위와 같이 쿼리를 작성하면 원하는 데이터가 조회되지 않는다.
생각해 보니 '_' 문자열은 와일드카드 문자열로 모든 문자를 대체한다.
때문에 다음과 같이 쿼리를 작성하면 예시 데이터의 모든 데이터가 조회된다.
SELECT * FROM t1 WHERE name LIKE 'e_%'
와일드카드 문자열을 포함하여 문자열을 찾으려면 어떻게 해야 할까?
이 글은 와일드카드 문자를 검색하기 위해 작성되었다.
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 '\'
- 만약 이스케이프 구문이 없다면, 와일드카드 문자로 인해 'eunbyeol', 'e_nbyeol' 데이터가 조회된다.
데이터에서 'e_ _byeol' 데이터 조회하기
SELECT
*
FROM
t1
WHERE
name LIKE 'e\_\_byeol%' escape '\'
- 만약 이스케이프 구문이 없다면, 와일드카드 문자로 인해 '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')
반응형