LIKE
LIKE 연산자는 열 이름 같은 문자열 표현식과 %(퍼센트) 및 _(밑줄) 와일드카드 문자의 사용 패턴을 서로 비교합니다. LIKE 패턴 일치는 항상 전체 문자열을 검색합니다. 문자열 내 아무 곳에서나 시퀀스를 일치시키려면 패턴이 퍼센트 기호로 시작해서 끝나야 합니다.
LIKE는 대/소문자를 구분하지만 ILIKE는 대/소문자를 구분하지 않습니다.
구문
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
인수
- expression
-
열 이름 같이 유효한 UTF-8 문자 표현식입니다.
- LIKE | ILIKE
-
LIKE는 대/소문자를 구분하여 패턴을 일치시킵니다. ILIKE는 단일 바이트 UTF-8(ASCII) 문자일 때 대/소문자를 구분하지 않고 패턴을 일치시킵니다. 멀티바이트 문자에 대해 대/소문자를 구분하지 않는 패턴 일치를 수행하려면 LIKE 조건이 있는 expression 및 pattern에 LOWER 함수를 사용합니다.
비교 조건자(예: = 및 <>)와 달리 LIKE 및 ILIKE 조건자는 후행 공백을 묵시적으로 무시하지 않습니다. 후행 공백을 무시하려면 RTRIM을 사용하거나 CHAR 열을 VARCHAR로 명시적으로 캐스트합니다.
~~
연산자는 LIKE와 동일하며~~*
는 ILIKE와 동일합니다. 또한!~~
및!~~*
연산자는 NOT LIKE 및 NOT ILIKE와 동일합니다. - 패턴
-
일치시킬 패턴이 포함된, 유효한 UTF-8 문자 표현식입니다.
- escape_char
-
패턴의 메타 문자를 이스케이프 처리하는 문자 표현식입니다. 기본값은 백슬래시 2개('\\')입니다.
pattern에 메타 문자가 포함되어 있지 않으면 패턴이 문자열 자체만 의미합니다. 이런 경우에는 LIKE가 등호 연산자와 동일한 역할을 합니다.
문자 표현식 중 하나는 CHAR 또는 VARCHAR 데이터 형식이 될 수 있습니다. 데이터 형식이 서로 다른 경우에는 Amazon Redshift가 pattern을 expression의 데이터 형식으로 변환합니다.
LIKE에서 지원되는 패턴 일치 메타 문자는 다음과 같습니다.
연산자 | 설명 |
---|---|
%
|
0개 이상의 문자 시퀀스를 일치시킵니다. |
_ |
모든 문자를 일치시킵니다. |
예시
다음 표는 LIKE를 사용한 패턴 일치의 예를 나타낸 것입니다.
표현식 | 반환 |
---|---|
'abc' LIKE 'abc' |
True |
'abc' LIKE 'a%' |
True |
'abc' LIKE '_B_' |
False |
'abc' ILIKE '_B_' |
True |
'abc' LIKE 'c%' |
False |
다음은 이름이 "E"로 시작하는 도시를 모두 찾는 예입니다.
select distinct city from users where city like 'E%' order by city; city --------------- East Hartford East Lansing East Rutherford East St. Louis Easthampton Easton Eatontown Eau Claire ...
다음은 성에 "ten"이 포함된 사용자를 찾는 예입니다.
select distinct lastname from users where lastname like '%ten%' order by lastname; lastname ------------- Christensen Wooten ...
다음 예제에서는 여러 패턴을 매칭하는 방법을 보여줍니다.
select distinct lastname from tickit.users where lastname like 'Chris%' or lastname like '%Wooten' order by lastname; lastname ------------- Christensen Christian Wooten ...
다음은 세 번째와 네 번째 문자가 "ea"인 도시를 찾는 예입니다. 이 명령에서는 ILIKE를 사용하여 대/소문자를 구분하지 않고 있습니다.
select distinct city from users where city ilike '__EA%' order by city; city ------------- Brea Clearwater Great Falls Ocean City Olean Wheaton (6 rows)
다음은 기본 이스케이프 문자열(\\)을 사용하여 'start_'(텍스트 start
뒤에 밑줄 _
가 붙음)가 포함된 문자열을 찾는 예입니다.
select tablename, "column" from pg_table_def where "column" like '%start\\_%' limit 5; tablename | column -------------------+--------------- stl_s3client | start_time stl_tr_conflict | xact_start_ts stl_undone | undo_start_ts stl_unload_log | start_time stl_vacuum_detail | start_row (5 rows)
다음은 '^'을 이스케이프 문자로 지정한 후 이 이스케이프 문자를 사용하여 'start_'(텍스트 start
뒤에 밑줄 _
가 붙음)가 포함된 문자열을 찾는 예입니다.
select tablename, "column" from pg_table_def where "column" like '%start^_%' escape '^' limit 5; tablename | column -------------------+--------------- stl_s3client | start_time stl_tr_conflict | xact_start_ts stl_undone | undo_start_ts stl_unload_log | start_time stl_vacuum_detail | start_row (5 rows)
다음 예시에서는 ~~*
연산자를 사용하여 'Ag'로 시작하는 도시에 대해 대소문자를 구분하지 않는(ILIKE) 검색을 수행합니다.
select distinct city from users where city ~~* 'Ag%' order by city;
city ------------ Agat Agawam Agoura Hills Aguadilla