Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So ersetzen Sie alle Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge in SQL Server – REPLACE()

In SQL Server können Sie T-SQL REPLACE() verwenden Funktion zum Ersetzen aller Instanzen einer bestimmten Zeichenfolge durch eine andere Zeichenfolge. Beispielsweise können Sie alle Vorkommen eines bestimmten Wortes durch ein anderes Wort ersetzen.

Syntax

Hier ist die offizielle Syntax:

REPLACE ( string_expression , string_pattern , string_replacement )

Wobei string_expression ist die Zeichenfolge, die eine oder mehrere Instanzen der zu ersetzenden Zeichenfolge (oder Teilzeichenfolge) string_pattern enthält der zu ersetzende String ist und string_replacement ist die Zeichenfolge, die es ersetzen soll.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

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

Ergebnis:

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

In diesem Beispiel ersetzen wir also einfach das Wort some mit dem Wort no .

Mehrere Wörter

Natürlich gibt es keine Regel, die besagt, dass Sie ein Wort nur durch ein Wort ersetzen können (und umgekehrt). Schließlich ersetzen wir einfach eine Zeichenfolge durch eine andere Zeichenfolge, unabhängig davon, ob diese Zeichenfolge Wörter, Buchstaben, Zahlen, Leerzeichen usw. enthält.

Also hätten wir dieses eine Wort leicht durch zwei oder mehr Wörter ersetzen können:

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

Ergebnis:

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

Hier ersetzen wir also das Wort some mit den Worten lots of .

Ein Wort entfernen

Sie können auch ein Wort (oder eine Teilzeichenfolge) aus der Zeichenfolge entfernen. Ersetzen Sie ihn dazu einfach durch den leeren String:

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

Ergebnis:

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

Wenn Sie jedoch genau hinsehen, werden Sie feststellen, dass die neue Zeichenfolge doppelte Leerzeichen enthält, wo wir das Wort entfernt haben. Dies liegt daran, dass das Wort, das wir entfernt haben, links und rechts Leerzeichen hatte. Wir haben das Wort entfernt, aber keine Leerzeichen, daher bleiben zwei Leerzeichen.

Wir können dies beheben, indem wir eines der Leerzeichen in das zu entfernende Wort einfügen:

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

Ergebnis:

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

Vorsicht!

Es ist sehr leicht, Fehler bei der Verwendung von REPLACE() zu machen Funktion (oder beliebige Suchen und Ersetzen von Funktionen für diese Angelegenheit).

Zum Beispiel dieser Fehler:

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

Ergebnis:

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

Wie Sie sehen können, haben wir das Wort art ersetzt mit pictures . Allerdings in diesem Fall das Wort apartment war ebenfalls betroffen – es hat sich in apicturesment verwandelt , was nicht beabsichtigt war. Das liegt daran, dass das Wort apartment enthält den Teilstring art .

Sie können sich dagegen normalerweise schützen, indem Sie Leerzeichen um das Suchwort sowie das Ersatzwort hinzufügen:

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

Ergebnis:

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

Dies setzt natürlich voraus, dass Sie das ganze Wort ersetzen. Sie müssen jede Situation einschätzen, sobald sie entsteht.

Sortierung/Groß-/Kleinschreibung

Sie können das optionale COLLATE verwenden -Klausel, um eine explizite Sortierung auf die Eingabe anzuwenden. Dies kann praktisch sein, um Suchen/Ersetzen-Operationen mit Berücksichtigung der Groß- und Kleinschreibung und dergleichen durchzuführen.

Hier ist ein Beispiel, das zwei Sortierungen vergleicht.

Groß-/Kleinschreibung beachten

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

Ergebnis:

Dogs, Dogs, and more Dogs!

In diesem Beispiel enthält die von uns angegebene Sortierung _CI im Namen, was „Groß- und Kleinschreibung“ bedeutet. Dadurch werden alle Vorkommen ersetzt, obwohl das erste Vorkommen Großbuchstaben enthält.

Sie werden feststellen, dass diese Methode die Groß-/Kleinschreibung der ersetzten Zeichenfolge nicht beeinflusst.

Groß-/Kleinschreibung beachten

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

Ergebnis:

Cats, Dogs, and more Dogs!

In diesem Beispiel enthält die von uns angegebene Sortierung _CS im Namen, was „Case Sensitive“ bedeutet. Dies verursacht das erste Auftreten von Cat zu überspringen, da sein erstes Zeichen ein Großbuchstabe ist (was nicht mit der Groß-/Kleinschreibung des zweiten Arguments übereinstimmt).