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).