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

Ersetzen mehrerer Zeichen in einer Zeichenfolge in SQL Server (T-SQL)

In SQL Server das REPLACE() Die Funktion ermöglicht es uns, einen String durch einen anderen String zu ersetzen. Aber was ist, wenn Sie eine Zeichenliste durch eine andere Zeichenliste ersetzen möchten?

Das TRANSLATE() Funktion könnte helfen.

Hier ist die Erklärung von Microsoft zu TRANSLATE() Funktion:

Gibt die als erstes Argument bereitgestellte Zeichenfolge zurück, nachdem einige im zweiten Argument angegebene Zeichen in einen im dritten Argument angegebenen Zielzeichensatz übersetzt wurden.

Klar wie Schlamm?

Beispiel

Ich denke, dies ist einer dieser Momente, die wirklich nach einem Beispiel schreien.

SELECT TRANSLATE('Fred [10 points]', '[]', '()');

Ergebnis:

Fred (10 points)

Im Grunde ist es so, als hätten wir eine Werteliste bereitgestellt, um eine andere Werteliste zu ersetzen. Es ist jedoch nicht erforderlich, jedes Listenelement mit einem Trennzeichen zu trennen.

Gleiche Anzahl von Zeichen

Das zweite und dritte Argument müssen die gleiche Anzahl von Zeichen enthalten.

Mit anderen Worten, Sie können Folgendes nicht tun:

SELECT TRANSLATE('Fred [10 points]', '[]', '(');

Ergebnis:

Msg 9828, Level 16, State 1, Line 1
The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.

In diesem Fall enthält das zweite Argument zwei Zeichen, aber das dritte Argument enthält nur eines, sodass wir einen Fehler erhalten.

Dies geschieht, weil SQL Server wissen muss, welches Zeichen das zweite Zeichen des zweiten Arguments ersetzen soll. Es geht jedes Zeichen einzeln durch und ersetzt es durch das entsprechende Zeichen aus dem dritten Argument. Wenn keiner existiert, hat es keine andere Wahl, als einen Fehler auszulösen.

Verglichen mit REPLACE()

Hier ist ein Beispiel, das den Unterschied zwischen TRANSLATE() veranschaulicht und REPLACE() .

SELECT 
  REPLACE('[] [hey]', '[]', '()') AS REPLACE,
  TRANSLATE('[] [hey]', '[]', '()') AS TRANSLATE;

Ergebnis:

+-----------+-------------+
 | REPLACE   | TRANSLATE   |
 |-----------+-------------|
 | () [hey]  | () (hey)    |
 +-----------+-------------+ 

Das REPLACE() Funktion verlässt [hey] genau so, wie es ist, weil diese ganze Zeichenfolge nicht im zweiten Argument angegeben wurde. Diese Funktion findet nur dann eine Übereinstimmung, wenn die gesamte Zeichenfolge vorhanden ist.

Das TRANSLATE() Funktion hingegen ersetzt [hey] mit (hey) weil es jedes Zeichen ersetzt Einer nach dem anderen. Es wird nicht nach einer ganzen Zeichenfolge zum Ersetzen gesucht, sondern nur nach jedem einzelnen Zeichen einzeln.