Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como substituir todas as ocorrências de uma String por outra String no SQL Server – REPLACE()


No SQL Server, você pode usar o T-SQL REPLACE() função para substituir todas as instâncias de uma determinada string por outra string. Por exemplo, você pode substituir todas as ocorrências de uma determinada palavra por outra.


Sintaxe


Aqui está a sintaxe oficial:
REPLACE ( string_expression , string_pattern , string_replacement )

Onde string_expression é a string que contém uma ou mais instâncias da string (ou substring) para substituir, string_pattern é a string a ser substituída e string_replacement é a string para substituí-lo.

Exemplo


Segue um exemplo para demonstrar:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Resultado:
My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

Então neste exemplo nós simplesmente substituímos a palavra some com a palavra no .

Múltiplas palavras


Claro, não existe uma regra que diga que você só pode substituir uma palavra por uma palavra (e vice-versa). Afinal, estamos simplesmente substituindo uma string por outra string, independentemente de essa string conter palavras, letras, números, espaços etc.

Assim, poderíamos facilmente ter substituído essa palavra por duas ou mais palavras:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Resultado:
My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

Então, aqui substituímos a palavra some com as palavras lots of .

Remover uma palavra


Você também pode remover uma palavra (ou substring) da string. Para fazer isso, basta substituí-lo pela string vazia:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Resultado:
My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

No entanto, se você olhar de perto, verá que a nova string contém espaços duplos onde removemos a palavra. Isso ocorre porque a palavra que removemos tinha espaços à esquerda e à direita. Removemos a palavra, mas não removemos nenhum espaço, portanto, restam dois espaços.

Podemos corrigir isso incluindo um dos espaços na palavra a ser removida:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');

Resultado:
My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Tenha cuidado!


É muito fácil cometer erros ao usar o REPLACE() função (ou qualquer encontrar e substituir a funcionalidade para esse assunto).

Por exemplo, este erro:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Resultado:
My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Como você pode ver, substituímos a palavra art com pictures . No entanto, neste caso, a palavra apartment também foi afetado – transformou-se em apicturesment , o que não era pretendido. Isso ocorre porque a palavra apartment contém a substring art .

Geralmente, você pode se proteger disso adicionando espaços ao redor da palavra de pesquisa, bem como a palavra de substituição:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');

Resultado:
My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Isso obviamente pressupõe que você está substituindo a palavra inteira. Você precisará avaliar cada situação à medida que ela surgir.

Agrupamento/Sensibilidade a maiúsculas e minúsculas


Você pode usar o opcional COLLATE cláusula para aplicar um agrupamento explícito à entrada. Isso pode ser útil para realizar operações de localizar/substituir com distinção entre maiúsculas e minúsculas e similares.

Aqui está um exemplo que compara dois agrupamentos.

Não diferencia maiúsculas de minúsculas

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

Resultado:
Dogs, Dogs, and more Dogs!

Neste exemplo, o agrupamento que especificamos inclui _CI em seu nome, que significa “Insensível a maiúsculas e minúsculas”. Isso faz com que todas as ocorrências sejam substituídas, apesar da primeira ocorrência ter caracteres maiúsculos.

Você notará que esse método não afeta o caso da string substituída.

Diferencia maiúsculas de minúsculas

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

Resultado:
Cats, Dogs, and more Dogs!

Neste exemplo, o agrupamento que especificamos inclui _CS em seu nome, que significa "Caixa sensível". Isso faz com que a primeira ocorrência de Cat ser ignorado, porque seu primeiro caractere é uma letra maiúscula (que não corresponde ao caso do segundo argumento).