[ 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>
Argumentos¶
Obrigatório:
subject
A cadeia de caracteres a ser procurada por correspondências.
pattern
Padrão a atender.
Para diretrizes sobre como especificar padrões, consulte Funções de cadeia de caracteres (expressões regulares).
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:
Parâmetro
Descrição
c
Correspondência com distinção entre maiúsculas e minúsculas
i
Correspondência sem distinção entre maiúsculas e minúsculas
m
Modo multilinha
e
Extração de subcorrespondências
s
POSIX wildcard character
.
matches\n
Padrão:
c
Para obter mais detalhes, consulte Especificação dos parâmetros para a expressão regular.
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¶
A função ancora implicitamente um padrão em ambas as extremidades (por exemplo,
''
automaticamente se torna'^$'
, e'ABC'
automaticamente se torna'^ABC$'
). Para combinar qualquer cadeia de caracteres começando com ABC, o padrão seria'ABC.*'
.O caractere de barra invertida (
\
) é o caractere de escape. Para obter mais informações, consulte Especificação de expressões regulares em constantes de cadeias de caracteres entre aspas simples.Para obter mais notas de uso, consulte o Notas de uso geral para funções de expressão regular.
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);
Exemplos que usam a 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');
+---------------+
| CITY |
|---------------|
| San Francisco |
| San Jose |
+---------------+
SELECT * FROM rlike_ex WHERE NOT RLIKE(city, 'san.*', 'i');
+------------+
| 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;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
$$\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$$) AS matches_email_address;
+-----------------------+
| 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.
SELECT RLIKE('800-456-7891',
'[2-9]\\d{2}-\\d{3}-\\d{4}') AS matches_phone_number;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
'\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
+-----------------------+
| 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;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
'[a-zA-Z_]+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True |
+-----------------------+
Exemplos que usam a segunda sintaxe¶
O exemplo a seguir realiza a correspondência de padrões que não diferenciam maiúsculas e minúsculas com curingas:
SELECT * FROM rlike_ex WHERE city RLIKE 'San.* [fF].*';
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
Exemplos adicionais¶
Para exemplos adicionais de expressões regulares, consulte [ NOT ] REGEXP.