Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment remplacer toutes les occurrences d'une chaîne par une autre chaîne dans SQL Server - REPLACE ()

Dans SQL Server, vous pouvez utiliser le T-SQL REPLACE() fonction pour remplacer toutes les instances d'une chaîne donnée par une autre chaîne. Par exemple, vous pouvez remplacer toutes les occurrences d'un certain mot par un autre mot.

Syntaxe

Voici la syntaxe officielle :

REPLACE ( string_expression , string_pattern , string_replacement )

string_expression est la chaîne qui contient une ou plusieurs instances de la chaîne (ou sous-chaîne) à remplacer, string_pattern est la chaîne à remplacer, et string_replacement est la chaîne pour le remplacer.

Exemple

Voici un exemple pour illustrer :

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Résultat :

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

Donc, dans cet exemple, nous remplaçons simplement le mot some avec le mot no .

Plusieurs mots

Bien sûr, aucune règle ne dit que vous ne pouvez remplacer un mot que par un seul mot (et vice-versa). Après tout, nous remplaçons simplement une chaîne par une autre chaîne, que cette chaîne contienne ou non des mots, des lettres, des chiffres, des espaces, etc.

Nous aurions donc pu facilement remplacer ce mot par deux mots ou plus :

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Résultat :

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

Donc ici nous remplaçons le mot some avec les mots lots of .

Supprimer un mot

Vous pouvez également supprimer un mot (ou une sous-chaîne) de la chaîne. Pour cela, il suffit de la remplacer par la chaîne vide :

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Résultat :

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

Cependant, si vous regardez attentivement, vous verrez que la nouvelle chaîne contient des espaces doubles là où nous avons supprimé le mot. C'est parce que le mot que nous avons supprimé avait des espaces à sa gauche et à sa droite. Nous avons supprimé le mot mais nous n'avons supprimé aucun espace, il reste donc deux espaces.

Nous pouvons résoudre ce problème en incluant l'un des espaces dans le mot à supprimer :

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');

Résultat :

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

Soyez prudent !

Il est très facile de faire des erreurs lors de l'utilisation de REPLACE() fonction (ou toute trouver et remplacer la fonctionnalité d'ailleurs).

Par exemple, cette erreur :

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

Résultat :

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

Comme vous pouvez le voir, nous avons remplacé le mot art avec des pictures . Cependant, dans ce cas, le mot apartment a également été affecté - il s'est transformé en apicturesment , ce qui n'était pas prévu. C'est parce que le mot apartment contient la sous-chaîne art .

Vous pouvez généralement vous protéger contre cela en ajoutant des espaces autour du mot de recherche, ainsi que du mot de remplacement :

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

Résultat :

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

Cela suppose évidemment que vous remplacez le mot entier. Vous devrez évaluer chaque situation au fur et à mesure qu'elle se présente.

Collation/sensibilité à la casse

Vous pouvez utiliser le COLLATE facultatif clause pour appliquer un classement explicite à l'entrée. Cela peut être pratique pour effectuer des opérations de recherche/remplacement sensibles à la casse, etc.

Voici un exemple qui compare deux classements.

Insensible à la casse

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

Résultat :

Dogs, Dogs, and more Dogs!

Dans cet exemple, le classement que nous spécifions inclut _CI dans son nom, qui signifie « insensible à la casse ». Cela entraîne le remplacement de toutes les occurrences, même si la première occurrence contient des caractères majuscules.

Vous remarquerez que cette méthode n'affecte pas la casse de la chaîne remplacée.

Sensible à la casse

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

Résultat :

Cats, Dogs, and more Dogs!

Dans cet exemple, le classement que nous spécifions inclut _CS dans son nom, qui signifie "Case Sensitive". Cela provoque la première occurrence de Cat à ignorer, car son premier caractère est une lettre majuscule (ce qui ne correspond pas à la casse du deuxième argument).