Como Usar a Função REPLACE() no SQL para Substituir Caracteres em uma String

A função REPLACE() no SQL é usada para substituir uma parte específica de uma string por outra string. É uma ferramenta altamente útil em operações de banco de dados, especialmente para limpeza de dados e mudanças de formato. Este artigo explicará várias maneiras de usar a função REPLACE(), desde o uso básico até substituições múltiplas de strings e combinações com outras funções de strings.

Índice

Sintaxe Básica da Função REPLACE()

A função REPLACE() é usada para substituir uma parte específica de uma string por outra string. A sintaxe básica é a seguinte:

REPLACE(string, target, replacement)

Aqui, string especifica a string na qual operar, target especifica a parte da string a ser substituída, e replacement especifica a nova string. Abaixo está um exemplo concreto.

SELECT REPLACE('Hello World', 'World', 'SQL');

Essa consulta substitui “World” em “Hello World” por “SQL”, retornando “Hello SQL”.

Exemplos de Substituição Parcial de String

Vamos ver exemplos específicos de como usar a função REPLACE() para substituir uma determinada string por outra. Abaixo está um exemplo de manipulação de dados contidos em uma tabela de banco de dados.

Por exemplo, suponha que você tenha uma tabela customers que armazena informações de clientes, incluindo dados de endereço. Se você quiser substituir abreviações nos endereços por suas formas completas, pode usar a função REPLACE() como segue:

SELECT customer_id, 
       REPLACE(address, 'St.', 'Street') AS updated_address
FROM customers;

Esta consulta seleciona customer_id e address da tabela customers, substituindo ‘St.’ na coluna address por ‘Street’, e retorna o resultado como a coluna updated_address.

Além disso, você pode realizar múltiplas substituições consecutivamente. Por exemplo, você pode substituir várias abreviações por suas formas completas como mostrado abaixo.

SELECT customer_id, 
       REPLACE(REPLACE(address, 'St.', 'Street'), 'Ave.', 'Avenue') AS updated_address
FROM customers;

Nesta consulta, ‘St.’ é primeiro substituído por ‘Street’, e depois ‘Ave.’ é substituído por ‘Avenue’.

Combinando a Função REPLACE() com Outras Funções de Strings

Ao combinar a função REPLACE() com outras funções de strings, você pode realizar manipulações de strings ainda mais poderosas. Abaixo estão alguns exemplos avançados que combinam a função REPLACE() com outras funções de strings.

Combinando a Função UPPER() com a Função REPLACE()

Este é um exemplo onde toda a string é convertida para maiúsculas antes de substituir uma parte específica.

SELECT customer_id,
       REPLACE(UPPER(address), 'STREET', 'ST.') AS updated_address
FROM customers;

Esta consulta converte o conteúdo da coluna address para maiúsculas e, em seguida, substitui ‘STREET’ por ‘ST.’.

Combinando a Função TRIM() com a Função REPLACE()

Este exemplo remove espaços em branco no início e no final da string antes de substituir uma parte específica.

SELECT customer_id,
       REPLACE(TRIM(address), 'Street', 'St.') AS updated_address
FROM customers;

Esta consulta remove espaços em branco no início e no final da coluna address e, em seguida, substitui ‘Street’ por ‘St.’.

Combinando a Função CONCAT() com a Função REPLACE()

Este exemplo combina várias strings e, em seguida, substitui uma parte específica.

SELECT customer_id,
       REPLACE(CONCAT(first_name, ' ', last_name), ' ', '-') AS username
FROM customers;

Esta consulta concatena as colunas first_name e last_name, substitui o espaço entre elas por um hífen, e retorna o resultado como a coluna username.

Métodos para Substituir Múltiplas Strings

Esta seção explica como substituir várias strings usando a função REPLACE(). A função REPLACE() em si só pode substituir uma string por vez, mas ao aninhá-la várias vezes, você pode realizar substituições múltiplas.

Aninhando Múltiplas Funções REPLACE()

Para substituir múltiplas strings, você pode aninhar as funções REPLACE(). Por exemplo, no caso seguinte, ‘St.’ é substituído por ‘Street’, e ‘Ave.’ é substituído por ‘Avenue’.

SELECT customer_id,
       REPLACE(REPLACE(address, 'St.', 'Street'), 'Ave.', 'Avenue') AS updated_address
FROM customers;

Esta consulta primeiro substitui ‘St.’ por ‘Street’ e, em seguida, substitui ‘Ave.’ por ‘Avenue’.

Otimização de Desempenho ao Substituir Muitas Strings

Se o aninhamento se tornar profundo, o desempenho pode se degradar. Nesses casos, pode ser necessário considerar outros métodos. Por exemplo, você poderia usar funções personalizadas do SQL ou procedimentos armazenados para realizar operações de substituição de forma coletiva.

Exemplo de Uso de uma Função Personalizada no SQL

Abaixo está um exemplo de uma função personalizada que realiza múltiplas substituições.

CREATE FUNCTION dbo.MultiReplace(@text NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    SET @text = REPLACE(@text, 'St.', 'Street');
    SET @text = REPLACE(@text, 'Ave.', 'Avenue');
    RETURN @text;
END;

Ao usar esta função personalizada, você pode realizar múltiplas substituições de uma só vez.

SELECT customer_id,
       dbo.MultiReplace(address) AS updated_address
FROM customers;

Esta consulta aplica a função personalizada à coluna address e realiza múltiplas substituições de uma só vez.

Considerações e Limitações da Função REPLACE()

Há várias considerações e limitações ao usar a função REPLACE(). Entender essas considerações ajudará você a usar a função REPLACE() de forma mais eficaz.

Tratamento de Valores NULL

A função REPLACE() retorna NULL se a string de entrada for NULL. Por exemplo, se você usar a função REPLACE() como mostrado abaixo, o resultado será NULL se address for NULL.

SELECT customer_id,
       REPLACE(address, 'St.', 'Street') AS updated_address
FROM customers;

Portanto, ao lidar com valores NULL, considere usar a função ISNULL() ou COALESCE() para tratar o NULL.

SELECT customer_id,
       REPLACE(ISNULL(address, ''), 'St.', 'Street') AS updated_address
FROM customers;

Sensibilidade a Maiúsculas e Minúsculas

A função REPLACE() diferencia maiúsculas de minúsculas. Portanto, ‘St.’ e ‘st.’ são tratados como strings diferentes.

SELECT REPLACE('Street', 'st', 'ST')

Esta consulta não realiza a substituição e retorna ‘Street’ como está. Se você quiser realizar uma substituição sem diferenciar maiúsculas de minúsculas, combine as funções UPPER() ou LOWER().

SELECT REPLACE(UPPER('Street'), 'ST', 'STREET')

Problemas com Correspondência Parcial

A função REPLACE() realiza substituições apenas em correspondências exatas. Para conseguir uma correspondência parcial, é necessário combiná-la com o operador LIKE ou com a função PATINDEX().

SELECT customer_id,
       CASE WHEN address LIKE '%St.%' THEN REPLACE(address, 'St.', 'Street')
            ELSE address
       END AS updated_address
FROM customers;

Esta consulta só realiza a substituição se ‘St.’ for encontrado na coluna address.

Conclusão

A função REPLACE() é uma ferramenta poderosa para substituir partes específicas de uma string por outra string no SQL. Explicamos seu uso básico, combinando-a com outras funções de strings, realizando substituições múltiplas de strings, e também discutimos considerações e limitações. Ao aproveitar a função REPLACE(), você pode facilmente limpar dados e alterar formatos, melhorando significativamente a eficiência das operações de banco de dados. Por favor, consulte este artigo para tirar o máximo proveito da função REPLACE() em várias situações.

Índice