[NOT] LIKE

[NOT] LIKE (패턴 일치)

문자열이 지정된 패턴과 일치하는지 또는 일치하지 않는지를 대소문자 구분(case-sensitive) 비교를 통해 판별해요. 대소문자를 구분하지 않는 일치에는 ILIKE를 대신 사용해요.

LIKE, ILIKE, RLIKE는 모두 유사한 작업을 수행해요. 다만 RLIKE는 LIKE와 ILIKE가 사용하는 SQL 패턴 구문 대신 POSIX ERE(확장 정규 표현식) 구문을 사용해요.

팁: 검색 최적화 서비스(Search optimization service)를 사용해 이 함수를 호출하는 쿼리의 성능을 개선할 수 있어요.

출처: Snowflake SQL Reference - LIKE

본문

구문 (Syntax)

<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ]

LIKE( <subject>, <pattern> [, <escape> ] )

인자 (Arguments)

필수:

subject

일치 대상이 되는 문자열이에요. 일반적으로 VARCHAR지만, 일부 다른 데이터 타입도 사용할 수 있어요.

pattern

일치시킬 패턴이에요. 일반적으로 VARCHAR지만, 일부 다른 데이터 타입도 사용할 수 있어요.

선택:

escape

와일드카드 문자 앞에 붙이는 문자(들)로, 해당 와일드카드를 와일드카드가 아닌 일반 문자로 해석하도록 지정해요.

반환 값 (Returns)

BOOLEAN 또는 NULL을 반환해요.

LIKE를 지정하면 일치할 때 값은 TRUE이고, 그렇지 않으면 FALSE를 반환해요.

NOT LIKE를 지정하면 일치하지 않을 때 값은 TRUE이고, 그렇지 않으면 FALSE를 반환해요.

LIKE 또는 NOT LIKE 중 하나를 지정해도 어떤 인자든 NULL이면 NULL을 반환해요.

사용 참고 사항 (Usage notes)

패턴 일치에 작은따옴표나 다른 특수 문자를 포함하려면 백슬래시 이스케이프 시퀀스(backslash escape sequence)를 사용할 수 있어요.

NULL은 NULL과 일치하지 않아요. 즉, subject이 NULL이고 pattern이 NULL이어도 일치로 간주되지 않아요.

pattern에는 SQL 와일드카드가 지원돼요: 밑줄(_)은 임의의 한 문자와 일치하고, 백분율 부호(%)는 0개 이상의 문자 시퀀스와 일치해요.

pattern의 와일드카드는 subject의 줄바꿈 문자(\n)를 일치 항목으로 포함해요.

패턴 일치는 전체 문자열을 대상으로 해요. 문자열 내 어디든 시퀀스를 일치시키려면 패턴을 %로 시작하고 끝내세요.

기본 이스케이프 문자는 없어요.

백슬래시를 이스케이프 문자로 사용하면 표현식과 ESCAPE 절 양쪽 모두에서 백슬래시를 이스케이프해야 해요. 예를 들어 다음 명령은 이스케이프 문자가 백슬래시라고 지정하고, 그 이스케이프 문자를 사용해 %를 리터럴로 검색해요(이스케이프 문자가 없으면 %는 와일드카드로 처리돼요):

'SOMETHING%' LIKE '%\\%%' ESCAPE '\\';

이스케이프 문자, 특히 백슬래시를 이스케이프 문자로 사용하는 예시는 Examples를 참고하세요.

이 함수가 지원하는 것보다 더 복잡한 패턴 일치가 필요하면 정규 표현식 함수를 대신 사용할 수 있어요.

데이터 정렬(Collation) 세부 사항

upper, lower, trim collation 사양만 지원돼요. upper/lower/trim의 조합(예: upper-trim, lower-trim)도 locale 조합(예: en-upper)을 제외하고는 지원돼요.

예시 (Examples)

몇몇 문자열을 담은 테이블을 만들어요:

CREATE OR REPLACE TABLE like_ex (name VARCHAR(20));

INSERT INTO like_ex VALUES
  ('John  Dddoe'),
  ('John \'alias\' Doe'),
  ('Joe   Doe'),
  ('John_down'),
  ('Joe down'),
  ('Elaine'),
  (''),  -- empty string
  (null);

다음 예시들은 LIKE, NOT LIKE, 와일드카드 문자 %의 사용을 보여줘요:

SELECT name FROM like_ex WHERE name LIKE '%Jo%oe%' ORDER BY name;
+------------------+
| NAME             |
|------------------|
| Joe   Doe        |
| John  Dddoe      |
| John 'alias' Doe |
+------------------+
SELECT name FROM like_ex WHERE name NOT LIKE '%Jo%oe%' ORDER BY name;
+-----------+
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe down  |
| John_down |
+-----------+
SELECT name FROM like_ex WHERE name NOT LIKE 'John%' ORDER BY name;
+-----------+
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe   Doe |
| Joe down  |
+-----------+
SELECT name FROM like_ex WHERE name NOT LIKE '' ORDER BY name;
+------------------+
| NAME             |
|------------------|
| Elaine           |
| Joe   Doe        |
| Joe down         |
| John  Dddoe      |
| John 'alias' Doe |
| John_down        |
+------------------+

다음 예시는 백슬래시를 사용해 작은따옴표를 이스케이프하여 패턴 일치에서 찾을 수 있게 해요:

SELECT name FROM like_ex WHERE name LIKE '%\'%' ORDER BY name;
+------------------+
| NAME             |
|------------------|
| John 'alias' Doe |
+------------------+

다음 예시들은 ESCAPE 절을 사용해요:

SELECT name FROM like_ex WHERE name LIKE '%J%h%^_do%' ESCAPE '^' ORDER BY name;
+-----------+
| NAME      |
|-----------|
| John_down |
+-----------+

like_ex 테이블에 행을 더 삽입해요:

INSERT INTO like_ex (name) VALUES ('100 times'), ('1000 times'), ('100%');

이스케이프 문자 없이 백분율 부호(%)는 와일드카드로 처리돼요:

SELECT * FROM like_ex WHERE name LIKE '100%' ORDER BY 1;
+------------+
| NAME       |
|------------|
| 100 times  |
| 100%       |
| 1000 times |
+------------+

이스케이프 문자를 사용하면 백분율 부호(%)가 리터럴로 처리돼요:

SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^' ORDER BY 1;
+------+
| NAME |
|------|
| 100% |
+------+

다음 예시는 백슬래시가 이스케이프 문자인 ESCAPE 절을 사용해요. 백슬래시 자체는 ESCAPE 절과 표현식 양쪽 모두에서 이스케이프되어야 해요:

SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\' ORDER BY 1;
+------+
| NAME |
|------|
| 100% |
+------+

더 알아보기 (Learn more)