SIMILAR TO - Amazon Redshift

SIMILAR TO

O operador SIMILAR TO faz a correspondências de uma expressão de string, tal como um nome de coluna, com um padrão de expressão regular SQL. Um padrão de expressão regular SQL pode incluir um conjunto de metacaracteres de correspondência padrão, incluindo os dois compatíveis com o operador LIKE.

O operador SIMILAR TO retorna verdadeiro somente se seu padrão corresponder à string inteira, ao contrário do comportamento de expressão regular POSIX, onde o padrão pode corresponder a qualquer parte da string.

SIMILAR TO executa uma correspondência com diferenciação entre maiúsculas e minúsculas.

nota

A correspondência de expressões regular usando SIMILAR TO é 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 SIMILAR TO '%(Ring|Die)%'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

Sintaxe

expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]

Argumentos

expressão

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

SIMILAR TO

SIMILAR to executa uma correspondência de padrão com diferenciação entre maiúsculas e minúsculas para toda a string na expressão.

pattern

Uma expressão válida de caractere UTF-8 que representa um padrão de expressão regular SQL.

escape_char

Uma expressão de caractere que irá escapar metacaracteres no padrão. O padrão é duas barras invertidas ('\\').

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

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.

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

Operador Descrição
% Corresponde a qualquer sequência de zero ou mais caracteres.
_ Corresponde a qualquer caractere único.
| Denota a alternação (uma das duas alternativas).
* Repita o item anterior zero ou mais vezes.
+ Repita o item anterior uma ou mais vezes.
? Repita o item anterior zero ou uma vez.
{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.
() Parênteses agrupam itens em um único item lógico.
[...] Uma expressão entre colchetes especifica uma classe de caractere, assim como em expressões regulares POSIX.

Exemplos

A seguinte tabela mostra exemplos de correspondência de padrão usando SIMILAR TO:

Expressão Retornos
'abc' SIMILAR TO 'abc' Verdadeiro
'abc' SIMILAR TO '_b_' Verdadeiro
'abc' SIMILAR TO '_A_' Falso
'abc' SIMILAR TO '%(b|d)%' Verdadeiro
'abc' SIMILAR TO '(b|c)%' Falso
'AbcAbcdefgefg12efgefg12' SIMILAR TO '((Ab)?c)+d((efg)+(12))+' Verdadeiro
'aaaaaab11111xy' SIMILAR TO 'a{6}_ [0-9]{5}(x|y){2}' Verdadeiro
'$0.87' SIMILAR TO '$[0-9]+(.[0-9][0-9])?' Verdadeiro

O seguinte exemplo encontra cidades cujos nomes contêm "E" ou "H":

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

O seguinte exemplo usa a string de escape padrão ('\\') para pesquisar strings que contêm "_":

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start\\_%' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy

O seguinte exemplo especifica '^' como a string de escape e, então, usa a string de escape para pesquisar strings que contêm "_":

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy