Função SQL replace: corrigindo inserções equivocadas
Dica publicada em Banco de Dados / Postgres
Função SQL replace: corrigindo inserções equivocadas
Imaginemos uma situação em que uma pessoa encarregada de cadastrar nomes de pessoas em um banco de dados. E que essa pessoa por algum motivo acabava confundindo os sobrenomes "dos Santos" e "da Silva".
No exemplo, o cadastro das pessoas que constam como "da Silva" na verdade teriam o sobrenome "dos Santos". Como corrigir isso? Fazer um UPDATE em cada linha? Há uma maneira simples, rápida e eficiente para isso:
Criação da tabela de exemplo:
CREATE TEMP TABLE tb1(
nome varchar(25)
);
Inserção dos valores (equivocadamente):
INSERT INTO tb1 VALUES ('Genésio Silva'), ('Estrobaldo da Silva'), ('Aventina Silva'), ('Eloécio da Silva');
Arrumando o erro:
UPDATE tb1 SET nome = replace(nome, 'da Silva', 'dos Santos');
Verificando o resultado:
SELECT * from tb1;
Genésio Silva
Estrobaldo dos Santos
Aventina Silva
Eloécio dos Santos
Como pode se constatar, apenas as ocorrências da string "da Silva" e não "Silva" foram alteradas para o novo valor.
No exemplo, o cadastro das pessoas que constam como "da Silva" na verdade teriam o sobrenome "dos Santos". Como corrigir isso? Fazer um UPDATE em cada linha? Há uma maneira simples, rápida e eficiente para isso:
Criação da tabela de exemplo:
CREATE TEMP TABLE tb1(
nome varchar(25)
);
Inserção dos valores (equivocadamente):
INSERT INTO tb1 VALUES ('Genésio Silva'), ('Estrobaldo da Silva'), ('Aventina Silva'), ('Eloécio da Silva');
Arrumando o erro:
UPDATE tb1 SET nome = replace(nome, 'da Silva', 'dos Santos');
Verificando o resultado:
SELECT * from tb1;
Genésio Silva
Estrobaldo dos Santos
Aventina Silva
Eloécio dos Santos
Como pode se constatar, apenas as ocorrências da string "da Silva" e não "Silva" foram alteradas para o novo valor.
Abs.