LIKE ANY

LIKE ANY

LIKE ANY는 문자열을 하나 이상의 지정된 패턴 중 어느 것과도 대소문자를 구분해 비교해 일치 여부를 확인하는 함수예요. WHERE 절에서 일치 항목을 필터링할 때 사용해요. 대소문자를 구분하지 않는 일치가 필요하면 ILIKE ANY를 대신 사용해요.

출처: Snowflake SQL Reference

본문

카테고리: String & binary 함수 (Matching/Comparison)

팁: 검색 최적화 서비스(search optimization service)를 사용하면 이 함수를 호출하는 쿼리의 성능을 개선할 수 있어요. 자세한 내용은 검색 최적화 서비스를 참고해요.

구문 (Syntax)

<subject> LIKE ANY (<pattern1> [, <pattern2> ... ] ) [ ESCAPE <escape_char> ]

인자 (Arguments)

필수:

<subject> — 패턴과 비교할 문자열이에요.

<pattern#> — 문자열과 비교할 패턴이에요. 패턴을 하나 이상 반드시 지정해야 해요.

선택:

<escape_char> — 와일드카드 문자 앞에 삽입해, 그 와일드카드를 와일드카드가 아닌 일반 문자로 해석하도록 나타내는 문자예요.

반환값 (Returns)

BOOLEAN 값 또는 NULL을 반환해요:

  • 일치하면 TRUE.
  • 일치하지 않으면 FALSE.
  • 인자 중 하나라도 NULL이면 NULL.

사용 시 유의사항 (Usage notes)

  • 패턴 일치에 작은따옴표나 다른 특수 문자를 포함하려면 백슬래시 이스케이프 시퀀스를 사용할 수 있어요.
  • NULL은 NULL과 일치하지 않아요. 즉 subject가 NULL이고 패턴 중 하나가 NULL이면 그것은 일치로 간주되지 않아요.
  • subject 앞에 NOT 논리 연산자를 사용해, 어떤 지정된 패턴과도 일치하지 않으면 TRUE를 반환하는 대소문자 구분 비교를 수행할 수 있어요.
  • pattern에서 SQL 와일드카드가 지원돼요:
    • 밑줄(_)은 임의의 단일 문자와 일치해요.
    • 백분율 기호(%)는 0개 이상의 문자 시퀀스와 일치해요.
  • pattern의 와일드카드는 subject의 줄바꿈 문자(\n)도 일치 항목으로 포함해요.
  • 패턴이 전체 입력 문자열(subject)과 일치해야 일치로 간주돼요. 문자열 내 어디서든 시퀀스와 일치시키려면 패턴을 %로 시작하고 끝내요(예: %something%).
  • 함수가 서브쿼리와 함께 사용된다면 서브쿼리는 단일 행을 반환해야 해요. 예를 들어 다음은 서브쿼리가 단일 행을 반환할 때만 사용해야 해요:
SELECT ...
  WHERE x LIKE ANY (SELECT ...)
  • 이 함수가 지원하는 것보다 더 복잡한 패턴 일치가 필요하다면 정규식 함수를 대신 사용할 수 있어요.

대조(collation) 세부 사항

upper, lower, trim 대조 지정만 지원돼요. upper, lower, trim과의 조합(예: upper-trim, lower-trim)도 지원되지만, 로케일 조합(예: en-upper)은 지원되지 않아요.

예시 (Examples)

몇몇 문자열을 포함하는 테이블을 만들어요:

CREATE OR REPLACE TABLE like_example(name VARCHAR(20));
INSERT INTO like_example VALUES
    ('John  Dddoe'),
    ('Joe   Doe'),
    ('John_down'),
    ('Joe down'),
    ('Tom   Doe'),
    ('Tim down'),
    (null);

이 쿼리는 와일드카드(%)가 있는 패턴으로 일치 항목을 찾는 방법을 보여줘요:

SELECT *
  FROM like_example
  WHERE name LIKE ANY ('%Jo%oe%','T%e')
  ORDER BY name;
+-------------+
| NAME        |
|-------------+
| Joe   Doe   |
| John  Dddoe |
| Tom   Doe   |
+-------------+

이 쿼리는 보통 와일드카드(_)인 문자를 리터럴로 취급하도록 지정하는 이스케이프 문자를 사용하는 방법을 보여줘요.

SELECT *
  FROM like_example
  WHERE name LIKE ANY ('%J%h%^_do%', 'T%^%e') ESCAPE '^'
  ORDER BY name;
+-----------+
| NAME      |
|-----------|
| John_down |
+-----------+

더 알아보기