REGEXP_REPLACE¶
Retorna a entidade com o padrão especificado (ou todas as ocorrências do padrão), seja removida ou substituída por uma cadeia de caracteres substituta.
Consulte também Funções de cadeia de caracteres (expressões regulares).
Sintaxe¶
REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
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:
replacement
Cadeia de caracteres que substitui as subcadeias de caracteres combinadas pelo padrão. Se uma cadeia de caracteres vazia for especificada, a função remove todos os padrões correspondentes e retorna a cadeia de caracteres resultante.
Padrão:
''
(cadeia de caracteres vazia).position
Número de caracteres desde o início da cadeia de caracteres onde a função começa a procurar correspondências.
Padrão:
1
(a busca por uma correspondência começa no primeiro caractere à esquerda)occurrence
Especifica a ocorrência do padrão a ser substituído. Se
0
for especificado, todas as ocorrências são substituídas.Padrão:
0
(todas as ocorrências)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 valor do tipo VARCHAR.
Se não for encontrada nenhuma correspondência, retorna a entidade original.
Retorna NULL se algum argumento for NULL.
Notas de uso¶
A cadeia de caracteres de substituição pode conter referências retroativas para capturar grupos (por exemplo, subexpressões do padrão). Um grupo de captura é uma expressão regular que se encontra entre parênteses (
( )
). O número máximo de grupos de captura é 9.As referências anteriores correspondem a expressões dentro de um grupo de captura. As referências inversas tem a forma
n
onden
é um valor de 0 a 9, inclusive, que se refere à instância correspondente do grupo de captura. Para mais informações, consulte Exemplos (neste tópico).Os parênteses (
( )
) e colchetes ([ ]
) atualmente devem ser em forma de parênteses duplos para serem analisados como cadeias de caracteres literais.O exemplo abaixo mostra como remover parênteses:
SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
+----------------+ | CUSTOMERS | |----------------| | Customers - NY | +----------------+
Para notas adicionais de uso, consulte Notas de uso geral para funções de expressão regular.
Detalhes do agrupamento¶
Arguments with collation specifications are currently not supported.
Exemplos¶
O exemplo a seguir substitui todos os espaços na cadeia de caracteres por nada (ou seja, todos os espaços são removidos):
SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
'( ){1,}',
'') AS result;
+------------------------------------------+
| RESULT |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+
O exemplo a seguir corresponde à cadeia de caracteres times
e a substitui pela cadeia de caracteres days
. A correspondência começa no primeiro caractere da cadeia de caracteres e substitui a segunda ocorrência da substring:
SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
'times',
'days',
1,
2) AS result;
+----------------------------------------------------+
| RESULT |
|----------------------------------------------------|
| It was the best of times, it was the worst of days |
+----------------------------------------------------+
O exemplo a seguir usa referências anteriores para reorganizar a cadeia de caracteres firstname middlename lastname
como lastname, firstname middlename
e inserir uma vírgula entre lastname
e firstname
:
SELECT REGEXP_REPLACE('firstname middlename lastname',
'(.*) (.*) (.*)',
'\\3, \\1 \\2') AS name_sort;
+--------------------------------+
| NAME_SORT |
|--------------------------------|
| lastname, firstname middlename |
+--------------------------------+