Operadores POSIX - Amazon Redshift

Operadores POSIX

Uma expressão regular POSIX é uma sequência de caracteres que especifica um padrão de correspondência. Uma string estabelece correspondência com uma expressão regular se for membro do conjunto regular descrito pela expressão regular.

As expressões regulares POSIX fornecem uma forma mais poderosa para a correspondência de padrão do que os operadores LIKE e SIMILAR TO. Padrões de expressão regular POSIX podem corresponder a qualquer porção de uma string, diferente do operador SIMILAR TO, que retorna verdadeiro somente se seu padrão corresponder a toda a string.

nota

A correspondência de expressões regular usando operadores POSIX é computacionalmente cara. Recomendamos usar LIKE sempre que possível, especialmente ao processar um número muito grande de linhas. Por exemplo, as seguintes consultas são funcionalmente idênticas, mas a consulta que usa LIKE é executada várias vezes mais rápido do que a consulta que usa uma expressão regular:

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

Sintaxe

expression [ ! ] ~ pattern

Argumentos

expressão

Uma expressão de caractere UTF-8 válida, tal como um nome de coluna.

!

Operador de negação. Não estabelece correspondência com a expressão regular.

~

Execute uma correspondência com diferenciação entre maiúsculas e minúsculas para qualquer substring de expressão.

nota

~~ é sinônimo de LIKE.

pattern

Um literal de string que representa um padrão de expressão regular.

Se o padrão não contém caracteres curinga, o padrão representa somente a própria string.

Para pesquisar strings que contêm metacaracteres, tal como ‘. * | ? ‘, e assim por diante, escapam o caractere usando duas barras invertidas (' \\ '). Ao contrário de SIMILAR TO e LIKE, a sintaxe de expressão regular POSIX não é compatível com um caractere de escape definido pelo usuário.

Qualquer uma das expressões de caracteres pode ser de tipos de dados CHAR ou VARCHAR. Se eles forem diferentes, o Amazon Redshift converterá o padrão no tipo de dados da expressão.

Todas as expressões de caracteres podem ser de tipos de dados CHAR ou VARCHAR. Se as expressões forem diferentes no tipo de dados, o Amazon Redshift os converterá no tipo de dados da expressão.

A correspondência de padrão POSIX é compatível com os seguintes metacaracteres:

POSIX Descrição
. Corresponde a qualquer caractere único.
* Corresponde a zero ou mais ocorrências.
+ Corresponde a uma ou mais ocorrências.
? Corresponde a zero ou uma ocorrência.
| Especifica correspondências alternativas; por exemplo, E | H significa E ou H.
^ Corresponde ao caractere de início de linha.
$ Corresponde ao caractere de final de linha.
$ Corresponde ao final da string.
[ ] Colchetes especificam uma lista de correspondência, que deve corresponder a uma expressão na lista. Um acento circunflexo (^) precede uma lista não correspondência, que corresponde a qualquer caractere exceto para as expressões representadas na lista.
( ) Parênteses agrupam itens em um único item lógico.
{m} Repita o item anterior exatamente m vezes.
{m,} Repita o item anterior m ou mais vezes.
{m,n} Repita o item anterior pelo menos m e não mais do que n vezes.
[: :] Corresponde a qualquer caractere em uma classe de caracteres POSIX. Nas seguintes classes de caracteres, o Amazon Redshift oferece suporte apenas a caracteres ASCII: [:alnum:], [:alpha:], [:lower:] e [:upper:]

O Amazon Redshift oferece suporte às classes de caracteres POSIX a seguir.

Classe do caractere Descrição
[[:alnum:]] Todos os caracteres ASCII alfanuméricos
[[:alpha:]] Todos os caracteres ASCII alfabéticos
[[:blank:]] Todos os caracteres de espaço em branco
[[:cntrl:]] Todos os caracteres de controle (não imprimíveis)
[[:digit:]] Todos os dígitos numéricos
[[:lower:]] Todos os caracteres ASCII alfabéticos em letras minúsculas
[[:punct:]] Todos os caracteres de pontuação
[[:space:]] Todos os caracteres de espaço (não imprimíveis)
[[:upper:]] Todos os caracteres ASCII alfabéticos em letras maiúsculas
[[:xdigit:]] Todos os caracteres hexadecimais válidos

O Amazon Redshift oferece suporte aos operadores influenciados por Perl em expressões regulares a seguir. Escape o operador usando duas barras invertidas (‘\\’).  

Operador Descrição Expressão equivalente da classe do caractere
\\d Um caractere de dígitos [[:digit:]]
\\D Um caractere não dígito [^[:digit:]]
\\w Um caractere de palavra [[:word:]]
\\W Um caractere não palavra [^[:word:]]
\\s Um caractere de espaço em branco [[:space:]]
\\S Um caractere de espaço não em branco [^[:space:]]
\\b Uma palavra de limite

Exemplos

A seguinte tabela mostra exemplos de correspondência de padrão usando operadores POSIX:

Expressão Retornos
'abc' ~ 'abc' Verdadeiro
'abc' ~ 'a' Verdadeiro
'abc' ~ 'A' Falso
'abc' ~ '.*(b|d).*' Verdadeiro
'abc' ~ '(b|c).*' Verdadeiro
'AbcAbcdefgefg12efgefg12' ~ '((Ab)?c)+d((efg)+(12))+' Verdadeiro
'aaaaaab11111xy' ~ 'a{6}.[1]{5}(x|y){2}' Verdadeiro
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?' Verdadeiro
'ab c' ~ '[[:space:]]' Verdadeiro
'ab c' ~ '\\s' Verdadeiro
' ' ~ '\\S' Falso

O seguinte exemplo localiza cidades cujos nomes contêm E ou 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

O exemplo a seguir encontra cidades cujos nomes não contêm E ou H:

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

O seguinte exemplo usa a string de escape padrão ('\\') para pesquisar strings que contêm um período.

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