Como Substituir Strings no MySQL: REPLACE() e REGEXP_REPLACE() (MySQL 8.0+)

目次

Introdução

Ao trabalhar com MySQL, não é incomum encontrar situações como “Quero substituir apenas uma string específica em toda a tabela” ou “Preciso corrigir dados incorretos em massa”. Por exemplo, quando uma URL usada nas descrições de produtos em um site de comércio eletrônico muda, quando você quer corrigir erros de digitação passados de uma só vez, ou quando precisa padronizar formatação (ex.: converter hífens em barras), frequentemente será necessário substituir strings.

Neste artigo, explicamos detalhadamente métodos e técnicas práticas para substituir strings no MySQL, desde o básico até o uso avançado. Você aprenderá os fundamentos da função REPLACE() mais utilizada, juntamente com exemplos reais, maneiras eficientes de executar substituições múltiplas e substituição avançada usando expressões regulares.

Também abordamos diferenças nas funções disponíveis dependendo da versão do MySQL, precauções importantes para evitar perda acidental de dados e considerações de desempenho — fornecendo informações realmente úteis em ambientes reais.

Depois de ler este artigo, você será capaz de resolver todas as questões e desafios a seguir:

  • Qual é a maneira mais fácil de substituir uma string específica no MySQL?
  • Como substituir múltiplos padrões em massa?
  • É possível fazer substituição flexível usando expressões regulares?
  • Quais são os riscos e precauções ao atualizar uma grande quantidade de dados de uma só vez?
  • Como fazer backup dos dados para prevenir falhas?

Este conteúdo é ideal para todos, desde iniciantes até praticantes experientes que desejam dominar com confiança a substituição de strings no MySQL.

Substituição de Strings no MySQL (Função REPLACE)

Se você deseja substituir strings no MySQL, a ferramenta mais usada é a função REPLACE(). REPLACE() encontra um padrão específico dentro de uma string ou valor de coluna e o substitui em massa por outra string.
É útil em muitas situações, incluindo correções rotineiras de dados e conversões em lote de grande escala em bancos de dados.

Sintaxe Básica do REPLACE()

REPLACE(original_string, search_string, replacement_string)
  • original_string : A string a ser modificada, ou o nome de uma coluna da tabela.
  • search_string : A parte que você deseja substituir.
  • replacement_string : A nova string a ser inserida.

Por exemplo:

SELECT REPLACE('I love MySQL!', 'MySQL', 'PostgreSQL');

Esta consulta procura por “MySQL” na string “I love MySQL!” e a substitui por “PostgreSQL”,
de modo que o resultado passa a ser “I love PostgreSQL!”.

Sensibilidade a Maiúsculas e Minúsculas

REPLACE() realiza busca e substituição sensíveis a maiúsculas/minúsculas. Por exemplo, “mysql” e “MySQL” são tratados como strings diferentes.
Se a string alvo não for encontrada, a string original é retornada como está.

Tipos de Dados Suportados

REPLACE() pode ser usado com colunas de string comuns, como CHAR, VARCHAR e TEXT. Contudo, tenha cuidado com tipos de dados especiais como BLOB, pois o comportamento pode não ser o esperado.

Dessa forma, REPLACE() é atraente porque é simples e intuitiva de usar.
Nas próximas seções, explicaremos exemplos práticos de SQL usando REPLACE() e como aplicá‑la aos dados de tabelas.

Uso Básico e Exemplos Práticos

Embora REPLACE() seja muito simples, no trabalho real você frequentemente precisa “substituir strings em uma coluna de banco de dados em massa”. Aqui, explicaremos operações básicas com REPLACE() e como corrigir dados de tabelas em lote usando exemplos concretos de SQL.

Substituição Simples de String com SELECT

Primeiro, aqui está o uso mais básico: substituir texto em uma string específica.

SELECT REPLACE('Hello, mysql user!', 'mysql', 'MySQL');

Esta consulta substitui “mysql” por “MySQL”, retornando “Hello, MySQL user!”.

Substituição em Massa em uma Coluna de Tabela com UPDATE

Um caso de uso comum no mundo real é substituir strings em uma coluna específica de uma tabela.
Por exemplo, se você quiser atualizar todas as ocorrências do domínio antigo oldsite.com para o novo domínio newsite.com nas descrições de produtos, pode executar o seguinte SQL:

UPDATE products
SET description = REPLACE(description, 'oldsite.com', 'newsite.com');

Este SQL substitui cada ocorrência de “oldsite.com” na coluna description da tabela products por “newsite.com”.

Precauções ao Executar

Um UPDATE usando REPLACE() é executado em todos os registros, o que significa que há risco de reescrever mais do que o pretendido.
Antes de executá-lo em produção, sempre faça um backup e verifique o comportamento em um ambiente de teste.

Limitando o Impacto com uma Cláusula WHERE

Se você quiser corrigir apenas um subconjunto de dados, use uma cláusula WHERE. Por exemplo, para focar apenas em produtos adicionados em 2024 ou depois:

UPDATE products
SET description = REPLACE(description, 'oldsite.com', 'newsite.com')
WHERE created_at >= '2024-01-01';

Isso ajuda a evitar reescritas desnecessárias.

Depois de entender esses conceitos básicos, as operações diárias e as tarefas de limpeza de dados se tornam muito mais eficientes.

Coleção de Exemplos de Casos de Uso Comuns

REPLACE() é útil em muitas situações do mundo real onde você pensa: “Posso substituir isso?” Abaixo estão exemplos práticos para casos de uso comuns.

1. Corrigindo Erros de Digitação e Texto Digitado Incorretamente

Por exemplo, é útil quando você deseja corrigir erros de entrada frequentes em massa.

UPDATE users
SET profile = REPLACE(profile, 'htto://', 'http://');

Este SQL corrige em lote o “htto://” digitado erroneamente para “http://”.

2. Substituição em Massa de URLs ou Domínios

Isso é útil quando você redesenha ou migra um site e deseja substituir um domínio antigo por um novo em todos os seus dados.

UPDATE blog_posts
SET content = REPLACE(content, 'old-domain.jp', 'new-domain.jp');

3. Removendo Espaços, Quebras de Linha ou Símbolos Indesejados

Se espaços ou códigos de quebra de linha indesejados estiverem misturados nos seus dados, você pode removê-los em massa com REPLACE().

UPDATE addresses
SET zipcode = REPLACE(zipcode, ' ', '');

Este exemplo remove todos os espaços dos códigos postais. Para quebras de linha, especifique '\n' ou '\r'.

4. Padronizando Formatos ( Hífen para Barra, Largura Total para Largura Média, etc. )

Você também pode padronizar formatos de dados facilmente com REPLACE().

UPDATE products
SET code = REPLACE(code, '-', '/');

Se você quiser converter caracteres de largura total para largura média em massa, também pode aninhar REPLACE() várias vezes.

5. Substituindo Múltiplos Padrões de Uma Vez

Se você quiser substituir vários padrões ao mesmo tempo, aninhe chamadas de REPLACE().

UPDATE contacts
SET note = REPLACE(REPLACE(note, '株式会社', '(株)'), '有限会社', '(有)');

Isso converte “株式会社” e “有限会社” em formas abreviadas de uma só vez.

REPLACE() é um recurso poderoso para lidar eficientemente com tarefas que exigem “muitas edições” e seriam dolorosas de fazer manualmente.

Técnicas Avançadas e Evitando Problemas

REPLACE() é muito conveniente, mas dependendo de como você o utiliza, pode encontrar problemas inesperados — ou pode operar de forma muito mais eficiente. Aqui explicamos técnicas avançadas práticas e dicas para prevenir problemas.

1. Tratamento de Valores NULL

Se a coluna alvo for NULL, REPLACE() também retorna NULL. Isso pode deixar os dados inalterados de maneiras inesperadas. Se você quiser garantir que a substituição seja aplicada mesmo quando existirem valores NULL, combine-a com IFNULL().

UPDATE users
SET comment = REPLACE(IFNULL(comment, ''), 'NGワード', '***');

Isso trata NULL como uma string vazia, de modo que a substituição será aplicada.

2. Substituição Insensível a Maiúsculas/Minúsculas

REPLACE() diferencia maiúsculas de minúsculas por padrão. Se você quiser substituir variações em maiúsculas e minúsculas, é comum combinar LOWER() / UPPER() para comparação e executar a substituição em duas passagens, conforme necessário.

UPDATE articles
SET title = REPLACE(REPLACE(title, 'MySQL', 'MariaDB'), 'mysql', 'MariaDB');

3. Substituição em Múltiplas Etapas (REPLACE Aninhado)

Se você quiser substituir vários padrões diferentes de uma só vez, aninhe chamadas REPLACE().

UPDATE logs
SET message = REPLACE(REPLACE(message, 'error', 'warning'), 'fail', 'caution');

4. Limitar o Impacto com UPDATE + WHERE

Em vez de atualizar todos os dados de uma vez, use uma cláusula WHERE para direcionar apenas as linhas que você precisa.

UPDATE customers
SET email = REPLACE(email, '@oldmail.com', '@newmail.com')
WHERE registered_at >= '2023-01-01';

5. Sempre Verifique em um Ambiente de Teste e Faça Backups

Atualizações usando REPLACE() são frequentemente difíceis de desfazer. Antes de executá-las em produção, sempre faça um backup. Testar minuciosamente com dados de exemplo ou em um ambiente de staging reduz muito o risco.

Aplicando REPLACE() corretamente, você pode realizar tarefas de substituição de strings de forma mais segura e eficiente.

Substituição de Strings com Expressões Regulares (Somente MySQL 8.0+ Only)

No MySQL 8.0 e posteriores, você pode usar não apenas REPLACE(), mas também REGEXP_REPLACE() para realizar substituições avançadas usando expressões regulares. Isso permite correspondência flexível de padrões e limpeza de dados eficiente para casos complexos.

Sintaxe Básica do REGEXP_REPLACE()

REGEXP_REPLACE(original_string, regex_pattern, replacement_string)
  • original_string : A string ou nome da coluna a ser modificada.
  • regex_pattern : O padrão a ser correspondido (por exemplo, [0-9]{3}-[0-9]{4} ).
  • replacement_string : A nova string a ser inserida.

Exemplo 1: Removendo Hífens de Números de Telefone

Se você quiser remover todos os hífens dos números de telefone, pode escrever:

UPDATE users
SET tel = REGEXP_REPLACE(tel, '-', '');

Exemplo 2: Padronizando o Formato do CEP

Expressões regulares também são úteis para padronizar códigos postais em diferentes formatos (por exemplo, “123-4567” e “1234567”).

UPDATE addresses
SET zipcode = REGEXP_REPLACE(zipcode, '([0-9]{3})-?([0-9]{4})', '\1-\2');

Este SQL padroniza tanto “1234567” quanto “123-4567” para o formato “123-4567”.

Exemplo 3: Removendo Caracteres Não Alfanuméricos

Você também pode remover todos os caracteres que não sejam letras ou dígitos.

UPDATE records
SET code = REGEXP_REPLACE(code, '[^a-zA-Z0-9]', '');

Isso remove todos os caracteres não alfanuméricos da coluna code.

Como Verificar sua Versão do MySQL

REGEXP_REPLACE() está disponível somente no MySQL 8.0 e posteriores. Você pode verificar sua versão atual do MySQL com esta consulta:

SELECT VERSION();

Se você estiver usando uma versão mais antiga, como MySQL 5.x, REGEXP_REPLACE() não está disponível, portanto considere usar REPLACE() ou realizar a substituição no lado da aplicação.

A substituição baseada em regex é extremamente poderosa quando os padrões de dados variam amplamente ou quando transformações complexas são necessárias.

Comparação com Outras Funções de String e Observações

O MySQL oferece várias funções de string úteis. Como cada função tem propósitos e características diferentes, é importante escolher a melhor para tarefas de substituição e edição. Aqui comparamos funções comuns como REPLACE(), REGEXP_REPLACE(), INSERT() e CONCAT().

1. REPLACE

  • Caso de uso : Substituir uma substring de “correspondência exata” dentro de uma string ou coluna por outra string.
  • Características : Sensível a maiúsculas/minúsculas; a mais simples para substituições simples.
  • Exemplo : SELECT REPLACE('cat and dog', 'cat', 'fox'); -- → "fox and dog"

2. REGEXP_REPLACE (MySQL 8.0+)

  • Caso de uso : Substituir partes que correspondem a um padrão de expressão regular.
  • Características : Excelente para correspondência de padrões complexos, substituição de múltiplos padrões e extração/edição parcial.
  • Exemplo : SELECT REGEXP_REPLACE('a123b456c', '[a-z]', ''); -- → "123456"

3. INSERT

  • Caso de uso : “Inserir” uma string sobrescrevendo um comprimento especificado a partir de uma posição especificada.
  • Características : Adequado para substituição/inserção parcial, mas mais como sobrescrita do que substituição típica.
  • Exemplo : SELECT INSERT('abcdef', 2, 3, 'XYZ'); -- → "aXYZef"

4. CONCAT

  • Caso de uso : “Concatenar” múltiplas strings ou valores de colunas.
  • Características : Não para substituição/edição; usado para juntar strings.
  • Exemplo : SELECT CONCAT('abc', '123'); -- → "abc123"

5. SUBSTRING / LEFT / RIGHT

  • Caso de uso : Extrair parte de uma string.
  • Características : Ideal para fatiar e extrair partes de dados.
  • Exemplo : SELECT SUBSTRING('abcdef', 2, 3); -- → "bcd"

Tabela de Comparação Rápida

FeatureReplacementRegex ReplacementInsert/OverwriteConcatenationSubstring Extraction
FunctionREPLACEREGEXP_REPLACEINSERTCONCATSUBSTRING, etc.
Pattern support× (exact match only)○ (regex supported)×××
MySQL versionAll8.0+AllAllAll

Escolhendo a função certa com base no seu caso de uso e versão do MySQL, você pode operar nos dados de forma mais eficiente e segura.

Desempenho e Precauções

Ao realizar substituição em massa de strings no MySQL, especialmente em tabelas grandes ou em produção, você pode encontrar problemas inesperados ou degradação de desempenho. Aqui estão precauções chave e dicas de desempenho para realizar o trabalho de forma segura e eficiente.

1. Tenha Cuidado com Atualizações em Massa em Conjuntos de Dados Grandes

As instruções UPDATE usando REPLACE() ou REGEXP_REPLACE() escaneiam e reescrevem as linhas alvo. Com conjuntos de dados grandes, o tempo de execução aumenta e a carga do servidor pode se tornar significativa. Em tabelas com dezenas de milhares a milhões de linhas, outras consultas podem desacelerar, e em casos piores, travas ou timeouts podem ocorrer.

2. Impacto nos Índices

Se um UPDATE alterar valores em colunas indexadas (ex.: email, código), os índices podem precisar ser reconstruídos. Isso pode afetar o desempenho. Para evitar reescritas desnecessárias, é importante restringir os dados alvo com uma cláusula WHERE.

3. Use Transações e Rollback

Para reescritas grandes, usar uma transação permite reverter se um erro ocorrer ou se os resultados da substituição não forem como esperado.

START TRANSACTION;
UPDATE users SET comment = REPLACE(comment, 'A', 'B') WHERE ...;
-- If everything looks good
COMMIT;
-- If something goes wrong
ROLLBACK;

Essa abordagem ajuda você a trabalhar com mais confiança.

4. Sempre Faça Backup em Produção

Antes de realizar atualizações em lote em grande escala, sempre faça um backup primeiro. Se ocorrer corrupção inesperada ou perda de dados, você pode restaurar do backup.

5. Processamento em Lotes ou Execução Dividida Pode Ajudar

Se o número de linhas for extremamente grande, em vez de atualizar tudo de uma vez, considere dividir o trabalho em pedaços (ex.: por faixas de ID), ou executá-lo durante horários de baixa demanda para reduzir a carga do servidor.

UPDATE logs
SET message = REPLACE(message, 'error', 'info')
WHERE id BETWEEN 1 AND 10000;

A execução passo a passo ajuda a distribuir a carga do servidor.

Ao considerar desempenho e segurança, você pode alcançar tanto eficiência operacional quanto prevenção de problemas ao realizar substituição de strings.

Estudo de Caso: Exemplos de Uso no Mundo Real

Aqui estão dois exemplos práticos de “substituição de strings” que são úteis em operações reais. Ambos ocorrem comumente durante manutenção rotineira e gerenciamento de dados. Explicaremos o fluxo de trabalho e precauções junto com consultas reais.

Caso 1: Atualização em Massa de URLs em Descrições de Produtos

Este caso envolve um site de e-commerce onde, após uma renovação do site, você deseja substituir a URL antiga (old-shop.com) pela nova URL (new-shop.jp) em todas as descrições de produtos.

Passos de Exemplo:

  1. Faça backup da tabela products antes de começar
  2. Restringir as linhas alvo usando uma cláusula WHERE (execuções de teste recomendadas)
  3. Executar a instrução UPDATE para a correção em massa

Exemplo SQL Real:

UPDATE products
SET description = REPLACE(description, 'old-shop.com', 'new-shop.jp');

Precauções:

  • Sempre faça backup e valide minuciosamente em um ambiente de teste antes de aplicar à produção
  • Se espaços ou quebras de linha podem envolver a URL, considere a substituição por regex (REGEXP_REPLACE) também

Caso 2: Padronizando Formatos de Dados de Clientes

Substituição de strings também é útil para padronizar formatos como números de telefone e códigos postais em bancos de dados de clientes. Por exemplo, para remover hífens de todos os números de telefone e torná‑los dígitos contínuos:

Exemplo SQL Real:

UPDATE customers
SET tel = REPLACE(tel, '-', '');

Se você estiver usando MySQL 8.0 ou superior, também pode usar regex para correções de formatação mais flexíveis.

Exemplo de Regex (Padronizar códigos postais para “123-4567”):

UPDATE customers
SET zipcode = REGEXP_REPLACE(zipcode, '([0-9]{3})-?([0-9]{4})', '\1-\2');

Precauções:

  • Valide que os resultados estejam como esperado antes de aplicar alterações aos dados de produção
  • Se o impacto for grande, reduza o escopo da atualização passo a passo usando uma cláusula WHERE

Como mostrado nesses estudos de caso, a substituição de strings no MySQL é extremamente útil para manutenção em larga escala e limpeza de dados rotineira. Ao fazer backup e validar consistentemente com antecedência, você pode prevenir erros e problemas.

Resumo e Lista de Verificação de Trabalho

Até agora, cobrimos como substituir strings no MySQL — desde o básico até técnicas avançadas e exemplos do mundo real. Finalmente, vamos resumir os pontos principais e fornecer uma lista de verificação útil ao executar operações reais.

Principais Conclusões

  • REPLACE() é ideal para substituição simples de strings em massa. É sensível a maiúsculas/minúsculas e funciona apenas em correspondências exatas.
  • REGEXP_REPLACE() (MySQL 8.0+) permite substituição avançada de padrões usando expressões regulares.
  • Substituição em massa com UPDATE é conveniente, mas backups e validação em um ambiente de teste são essenciais.
  • Aninhar REPLACE() é eficaz para substituir múltiplos padrões de uma vez.
  • Preste muita atenção ao desempenho, impacto nos índices e carga do servidor ao processar grandes conjuntos de dados.

Lista de Verificação de Trabalho

  • □ Você identificou com precisão o padrão a ser substituído e a(s) coluna(s) alvo?
  • □ Você restringiu as atualizações apenas às linhas necessárias usando uma cláusula WHERE?
  • □ Você fez um backup antes de aplicar alterações à produção?
  • □ Você validou o comportamento da consulta usando um ambiente de teste ou dados fictícios?
  • □ Você tem um plano para usar processamento em lote ou intervalos LIMIT/ID dependendo do volume de dados e da carga do servidor?
  • □ Após a operação, você verificou minuciosamente se os resultados da substituição correspondem às expectativas?
  • □ Você escolheu a função apropriada com base na sua versão do MySQL?

Seguindo esta lista de verificação, você pode realizar a substituição de strings no MySQL de forma segura e confiável.
Porque mesmo um pequeno erro pode gerar grandes problemas, certifique‑se de verificar cada passo cuidadosamente antes de aplicar alterações à produção.

FAQ (Perguntas Frequentes)

Aqui resumimos perguntas comuns e preocupações do mundo real sobre “substituição de strings no MySQL”. Use esta seção para reduzir incertezas e trabalhar com mais confiança.

Q1. O REPLACE() é sensível a maiúsculas/minúsculas?

A1: Sim. REPLACE() é sensível a maiúsculas/minúsculas. Por exemplo, “mysql” e “MySQL” são tratados como strings diferentes. Se precisar substituir ambos, você pode aninhar REPLACE() duas vezes ou usar outra abordagem.

Q2. O que acontece se eu usá‑lo em uma coluna que contém NULL?

A2: Se a coluna alvo for NULL, o resultado de REPLACE() também será NULL, e nada será alterado. Se quiser substituir mesmo quando houver valores NULL, combine com IFNULL().

Q3. Posso substituir vários padrões de uma vez?

A3: Sim. Você pode aninhar chamadas de REPLACE() para substituir vários padrões em uma única instrução. Contudo, os resultados podem variar dependendo da ordem de substituição, portanto valide previamente.

Q4. Como posso substituir usando expressões regulares?

A4: Use REGEXP_REPLACE(), que está disponível no MySQL 8.0 e posteriores. Se você estiver usando uma versão mais antiga, considere a substituição no lado da aplicação ou outro método.

Q5. Qual é a diferença em relação ao REPLACE INTO?

A5: REPLACE() é uma função de “substituição de string”, enquanto REPLACE INTO é uma instrução SQL semelhante a INSERT que “exclui uma linha existente e insere uma nova linha”. Elas servem a propósitos completamente diferentes.

Q6. Posso restaurar os dados originais após a substituição? (Recuperação)

A6: Na maioria dos casos, é difícil reverter os dados após a substituição. Sempre faça um backup antes de executar a operação. Se algo der errado, restaure a partir do seu backup.

Q7. Como posso verificar minha versão do MySQL?

A7: Execute a consulta a seguir para verificar sua versão do MySQL:

SELECT VERSION();

Verifique sua versão com antecedência para confirmar se funções como REGEXP_REPLACE() estão disponíveis.

Use estas FAQs para prosseguir com operações de substituição de strings com confiança.

Links Relacionados e Referências

Se você quiser aprofundar-se em substituição de strings ou aprendizado de SQL, usar a documentação oficial e recursos técnicos confiáveis é eficaz. Também apresentamos artigos relacionados e ferramentas úteis — por favor, use-os como referência.

1. Documentação Oficial do MySQL

2. Exemplos Práticos de REGEXP_REPLACE()

4. Se Você Quer Aprender o Básico de SQL