Categorias:

Funções de cadeia de caracteres (expressões regulares)

[ NOT ] REGEXP

Executa uma comparação para determinar se uma cadeia de caracteres corresponde ou não a um padrão especificado. Ambas as entradas devem ser expressões de texto.

REGEXP é semelhante à função [ NOT ] LIKE, mas com expressões regulares POSIX estendidas em vez da sintaxe padrão SQL LIKE. Oferece suporte às condições de correspondência mais complexas do que LIKE.

Dica

Você pode usar o serviço de otimização de pesquisa para melhorar o desempenho de consultas que chamam essa função. Para obter mais detalhes, consulte Serviço de otimização de pesquisa.

Aliases:

[ NOT ] RLIKE (2ª sintaxe)

Consulte também: Funções de cadeia de caracteres (expressões regulares)

Sintaxe

<subject> [ NOT ] REGEXP <pattern>
Copy

Argumentos

Obrigatório:

subject

Sujeito à correspondência.

pattern

Padrão a atender.

Retornos

Retorna um BOOLEAN ou NULL.

  • Quando REGEXP é especificado, o valor será TRUE se houver uma correspondência. Caso contrário, retorna FALSE.

  • Quando NOT REGEXP é especificado, o valor será TRUE se não houver correspondência. Caso contrário, retorna FALSE.

  • Quando REGEXP ou NOT REGEXP é especificado, retorna NULL se algum argumento for NULL.

Notas de uso

Detalhes do agrupamento

Arguments with collation specifications are currently not supported.

Exemplos

O exemplo abaixo mostra como usar REGEXP com uma simples expressão de curinga:

Criar a tabela e carregar os dados:

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
    ('San Francisco'),
    ('San Jose'),
    ('Santa Clara'),
    ('Sacramento');
Copy

Usar curingas para pesquisar um padrão:

SELECT v
    FROM strings
    WHERE v REGEXP 'San* [fF].*'
    ORDER BY v;
Copy
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+

O caractere de barra invertida \ é o caractere de escape em expressões regulares, e especifica caracteres especiais ou grupos de caracteres. Por exemplo, \s é a expressão regular para o espaço branco.

O analisador de cadeias de caracteres do Snowflake, que analisa cadeias de caracteres literais, e também trata a barra invertida como um caractere de escape. Por exemplo, uma barra invertida é usada como parte da sequência de caracteres que especifica um caractere de tabulação. Assim, para criar uma cadeia de caracteres que contenha uma única barra invertida, é necessário especificar duas barras invertidas. Por exemplo, compare a cadeia de caracteres na instrução de entrada abaixo com a cadeia de caracteres correspondente na saída:

INSERT INTO strings (v) VALUES
    ('Contains embedded single \\backslash')
    ;
Copy
SELECT * 
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+

Este exemplo mostra como procurar cadeias de caracteres que começam com “San”, onde “San” é uma palavra completa (por exemplo, não faz parte de “Santa”). \b é a sequência de escape para um limite de palavras.

SELECT v, v regexp 'San\\b.*' AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | False   |
| Sacramento                          | False   |
| San Francisco                       | True    |
| San Jose                            | True    |
| Santa Clara                         | False   |
+-------------------------------------+---------+

Este exemplo mostra como procurar um espaço em branco seguido de barra invertida. Note que a única barra invertida a ser procurada é representada por quatro barras invertidas abaixo; para que REGEXP procure por uma barra invertida literal, essa barra invertida deve ter um escape, então você precisará de duas barras invertidas. O analisador de cadeias de caracteres exige que cada uma dessas barras invertidas tenha um caractere de escape, então a expressão contém quatro barras invertidas para representar a única barra invertida que a expressão está procurando:

SELECT v, v regexp '.*\\s\\\\.*' AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+

O exemplo seguinte é o mesmo que o exemplo anterior, exceto que ele usa $$ como delimitador de cadeia de caracteres para dizer ao analisador de cadeia de caracteres que a cadeia de caracteres é literal e que as barras invertidas não devem ser interpretadas como sequências de escape. (As barras invertidas ainda são interpretadas como sequências de escape por REGEXP).

SELECT v, v regexp $$.*\s\\.*$$ AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+