Categorias:

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

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> ] )
Copy

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 onde n é 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;
    
    Copy
    +----------------+
    | 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;
Copy
+------------------------------------------+
| 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;
Copy
+----------------------------------------------------+
| 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;
Copy
+--------------------------------+
| NAME_SORT                      |
|--------------------------------|
| lastname, firstname middlename |
+--------------------------------+