Categorias:

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

[ NOT ] RLIKE

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.

RLIKE é 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 ] REGEXP (2ª sintaxe) , REGEXP_LIKE (1ª sintaxe)

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

Sintaxe

-- 1st syntax
RLIKE( <subject> , <pattern> [ , <parameters> ] )

-- 2nd syntax
<subject> [ NOT ] RLIKE <pattern>
Copy

Argumentos

Obrigatório:

subject

Sujeito à correspondência.

pattern

Padrão a atender.

Opcional:

parameters

Cadeia de caracteres de um ou mais caracteres que especifica os parâmetros usados para a busca de correspondências. Valores com suporte:

c , i , m , e , s

Para obter mais detalhes, consulte Especificação dos parâmetros para a expressão regular.

Padrão: c

Retornos

Retorna um BOOLEAN ou NULL.

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

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

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

Notas de uso

Detalhes do agrupamento

Arguments with collation specifications are currently not supported.

Exemplos

Execute os seguintes comandos para configurar os dados para os exemplos neste tópico:

CREATE OR REPLACE TABLE rlike_ex(city varchar(20));
INSERT INTO rlike_ex VALUES ('Sacramento'), ('San Francisco'), ('San Jose'), (null);
Copy

Primeira sintaxe

Os exemplos a seguir realizam a correspondência de padrões sem distinção entre maiúsculas e minúsculas com curingas:

SELECT * FROM rlike_ex WHERE RLIKE(city, 'san.*', 'i');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
| San Jose      |
+---------------+
SELECT * FROM rlike_ex WHERE NOT RLIKE(city, 'san.*', 'i');
Copy
+------------+
| CITY       |
|------------|
| Sacramento |
+------------+

Os exemplos a seguir determinam se uma cadeia de caracteres corresponde ao formato de um número de telefone e de um endereço de e-mail. Nestes exemplos, as expressões regulares são especificadas em cadeia de caracteres entre cifrões para evitar o escape das barras invertidas na expressão regular.

SELECT RLIKE('800-456-7891', $$[2-9]\d{2}-\d{3}-\d{4}$$) AS matches_phone_number;
Copy
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+
SELECT RLIKE('jsmith@email.com',$$\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$$) AS matches_email_address;
Copy
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

Os exemplos a seguir realizam as mesmas correspondências, mas usam constantes de cadeias de caracteres de aspas simples para especificar as expressões regulares.

Como o exemplo usa constantes de cadeias de caracteres com aspas simples, cada barra invertida deve ser escapada com outra barra invertida.

-- Escape the backslash character (\) in \w and \d

SELECT RLIKE('800-456-7891','[2-9]\\d{2}-\\d{3}-\\d{4}') AS matches_phone_number;
Copy
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+
SELECT RLIKE('jsmith@email.com','\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
Copy
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

Como alternativa, reescreva as instruções e evite sequências que dependam do caractere de barra invertida.

SELECT RLIKE('800-456-7891','[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}') AS matches_phone_number;
Copy
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+
SELECT RLIKE('jsmith@email.com','[a-zA-Z_]+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
Copy
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

Segunda sintaxe

Correspondência de padrões que diferencia maiúsculas e minúsculas:

SELECT * FROM rlike_ex WHERE city RLIKE 'San.* [fF].*';
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

Exemplos adicionais

Para exemplos adicionais de expressões regulares, consulte [ NOT ] REGEXP.