POSIX 연산자 - Amazon Redshift

POSIX 연산자

POSIX 정규 표현식은 일치 패턴을 지정하는 일련의 문자입니다. 문자열이 정규 표현식에 설명된 정규 집합의 멤버인 경우 해당 문자열은 정규 표현식과 일치합니다.

POSIX 정규 표현식은 LIKESIMILAR TO 연산자보다 더욱 강력한 패턴 일치 수단을 제공합니다. POSIX 정규 표현식은 패턴은 전체 문자열과 일치하는 경우에만 true를 반환하는 SIMILAR TO 연산자와 달리 문자열 구간과 일치시킬 수 있습니다.

참고

POSIX 연산자를 사용하는 정규 표현식 일치는 계산에 따른 리소스 비용이 높습니다. 따라서 특히 다수의 행을 처리할 때는 최대한 LIKE를 사용하는 것이 좋습니다. 예를 들어 다음 두 쿼리는 기능면에서 동일하지만 LIKE를 사용하는 쿼리의 실행 속도가 정규 표현식을 사용하는 쿼리보다 몇 배 더 빠릅니다.

select count(*) from event where eventname ~ '.*(Ring|Die).*'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

구문

expression [ ! ] ~ pattern

인수

expression

열 이름 같이 유효한 UTF-8 문자 표현식입니다.

!

부정 연산자입니다. 정규 표현식과 일치하지 않습니다.

~

대/소문자를 구분하여 expression의 하위 문자열과 일치시킵니다.

참고

~~는 LIKE의 동의어입니다.

패턴

정규 표현식 패턴을 나타내는 문자열 리터럴입니다.

pattern에 와일드카드 문자가 포함되어 있지 않으면 패턴이 문자열 자체만 의미합니다.

. * | ? ‘ 등 메타 문자가 포함된 문자열을 찾으려면 백슬래시 2개(' \\')를 사용하여 문자를 이스케이프 처리하십시오. SIMILAR TOLIKE와 달리 POSIX 정규 표현식 구문은 사용자 정의 이스케이프 문자를 지원하지 않습니다.

문자 표현식 중 하나는 CHAR 또는 VARCHAR 데이터 형식이 될 수 있습니다. 데이터 형식이 서로 다른 경우에는 Amazon Redshift가 patternexpression의 데이터 형식으로 변환합니다.

문자 표현식 모두 CHAR 또는 VARCHAR 데이터 형식이 될 수 있습니다. 표현식의 데이터 형식이 다르면 Amazon Redshift가 expression의 데이터 형식으로 변환합니다.

POSIX 패턴 일치에서 지원되는 메타 문자는 다음과 같습니다.

POSIX 설명
. 모든 문자를 일치시킵니다.
* 0개 이상의 발생 패턴을 일치시킵니다.
+ 1개 이상의 발생 패턴을 일치시킵니다.
? 0개 또는 1개의 발생 패턴을 일치시킵니다.
| 대체할 일치 패턴을 지정합니다. 예를 들어 E | H E 또는 H를 의미합니다.
^ 라인 시작 문자를 일치시킵니다.
$ 라인 끝 문자를 일치시킵니다.
$ 문자열 끝을 일치시킵니다.
[ ] 대괄호는 일치하는, 즉 목록의 표현식 1개와 일치해야 하는 목록을 지정합니다. 일치하지 않는, 즉 목록의 표현식을 제외한 모든 문자와 일치하는 목록 앞에는(^)이 입력됩니다.
( ) 그룹 항목을 괄호로 묶어 단일 논리 항목으로 처리합니다.
{m} 이전 항목을 정확히 m번 반복합니다.
{m,} 이전 항목을 m번 이상 반복합니다.
{m,n} 이전 항목을 m번 이상, n번 미만 반복합니다.
[: :] POSIX 문자 클래스 안에 있는 모든 문자를 일치시킵니다. [:alnum:], [:alpha:], [:lower:], [:upper:] 문자 클래스에서는 Amazon Redshift가 ASCII 문자만 지원합니다.

다음은 Amazon Redshift에서 지원되는 POSIX 문자 클래스입니다.

문자 클래스 설명
[[:alnum:]] 모든 ASCII 영숫자 문자
[[:alpha:]] 모든 ASCII 알파벳 문자
[[:blank:]] 모든 공백 문자
[[:cntrl:]] 모든 제어 문자(비인쇄)
[[:digit:]] 모든 숫자
[[:lower:]] 모든 ASCII 알파벳 소문자
[[:punct:]] 모든 구두점 문자
[[:space:]] 모든 공백 문자(비인쇄)
[[:upper:]] 모든 ASCII 알파벳 대문자
[[:xdigit:]] 모든 유효 16진수 문자

Amazon Redshift는 정규 표현식에서 다음과 같이 Perl의 영향을 받는 연산자를 지원합니다. 이러한 연산자는 백슬래시 2개(‘\\’)를 사용하여 이스케이프 처리합니다. 

연산자 설명 등가의 문자 클래스 표현식
\\d 숫자 문자 [[:digit:]]
\\D 숫자를 제외한 문자 [^[:digit:]]
\\w 단어 문자 [[:word:]]
\\W 단어를 제외한 문자 [^[:word:]]
\\s 공백 문자 [[:space:]]
\\S 공백을 제외한 문자 [^[:space:]]
\\b A boundary word

다음 표는 POSIX 연산자를 사용한 패턴 일치의 예를 나타낸 것입니다.

표현식 반환 값
'abc' ~ 'abc' True
'abc' ~ 'a' True
'abc' ~ 'A' False
'abc' ~ '.*(b|d).*' True
'abc' ~ '(b|c).*' True
'AbcAbcdefgefg12efgefg12' ~ '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' ~ 'a{6}.[1]{5}(x|y){2}' True
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?' True
'ab c' ~ '[[:space:]]' True
'ab c' ~ '\\s' True
' ' ~ '\\S' False

다음은 이름에 E 또는 H가 포함된 도시를 찾는 예입니다.

SELECT DISTINCT city FROM users WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

다음 예는 이름에 E 또는 H가 포함되지 않은 도시를 찾습니다.

SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Aberdeen Abilene Ada Agat Agawam

다음은 기본 이스케이프 문자열('\\')을 사용하여 "마침표"가 포함된 문자열을 찾는 예입니다.

SELECT venuename FROM venue WHERE venuename ~ '.*\\..*' ORDER BY venueid; venuename ------------------------------ St. Pete Times Forum Jobing.com Arena Hubert H. Humphrey Metrodome U.S. Cellular Field Superpages.com Center E.J. Nutter Center Bernard B. Jacobs Theatre St. James Theatre