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

Top 5 Fakten zum Suchen und Ersetzen von SQL-Texten in SQL Server mit der REPLACE-Funktion

Die heutigen Code-Editoren und Textverarbeitungsprogramme verfügen über eine Such- und Ersetzungsfunktion. Es ist hilfreich, wenn Sie ein Wort oder eine Gruppe von Wörtern ändern müssen. Wir möchten unsere schriftliche Arbeit nicht für ein kleines Problem oder eine Änderung wegwerfen.

Gleiches gilt für unsere Daten. Benutzer werden uns verfluchen, wenn wir ihnen sagen, dass sie bearbeiten sollen, was umbenannt werden muss. Deshalb steht auch eine Such- und Ersetzungsfunktion zur Verfügung, um Texte zu ersetzen, die in unseren Datenbanken geschrieben wurden. Hier kommt der REPLACE-Befehl in SQL ins Spiel.

Die REPLACE-Syntax in SQL lautet wie folgt:

ERSETZEN ( , , )

Beachten Sie, dass alle Parameter erforderlich sind. Die kann ein Zeichenfolgenliteral oder ein Zeichenfolgenergebnis eines Ausdrucks sein. In Datenbanktabellen übergeben wir normalerweise eine Zeichenfolgenspalte, in der sich der Wert ändern soll. In der Zwischenzeit ist ein String innerhalb von du willst suchen. Abschließend übergeben Sie einen das wird ersetzen . Ganz einfach, nicht wahr?

Aber es kann einige Vorbehalte geben. Auf diese Weise können Sie herausfinden, wie Sie das Ersetzen falscher Wörter oder das Einfügen doppelter Datensätze im SQL Server vermeiden können. Oder vielleicht nicht die richtigen Worte ersetzen. Dann am Ende deine Daten durcheinander bringen.

Sind Sie neu bei SQL REPLACE? Hier ist ein KOSTENLOSER Spickzettel für Sie. Geben Sie unten einfach Ihre E-Mail-Adresse ein und wir senden sie direkt an Ihren Posteingang.

Hört sich cool an? Lassen Sie uns einsteigen.

[sendpulse-form id=”12251″]

1. SQL REPLACE ersetzt Text für ALLE Vorkommen

Stimmt. Es fegt Ihren gesamten Text mit der Zeichenfolge, die Sie suchen möchten. Lassen Sie mich es Ihnen zeigen und das Problem erklären. Sehen Sie sich das folgende Beispiel an:

SELECT REPLACE('know the unknown','know','seek'); 
-- OUTPUT: 'seek the unseekn. Surprise!

Die wissen Zeichenfolge existiert zweimal, in den Worten know und wissen n. Wenn Sie nicht aufpassen, schleichen sich Rechtschreibfehler in Ihre Daten ein. Stattdessen können Sie Platz hinzufügen, um nur nach vollständigen Wörtern zu suchen. Hier ist der geänderte Code:

SELECT REPLACE('know the unknown','know ','seek ');   
-- OUTPUT: 'seek the unknown'.

Viel besser? Es kann andere Szenarien geben, aber Sie verstehen, worauf es ankommt.

2. SQL REPLACE kann Texte entfernen

Haben Sie versucht, ein Wort in einem Texteditor durch nichts zu ersetzen? Oder möchten Sie Duplikate in SQL entfernen? Es passiert auch in SQL REPLACE. Hier ist ein Beispiel:

USE AdventureWorks
GO

SELECT
 EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;

Die erste Spalte enthält den Domänennamen der ursprünglichen E-Mail-Adresse. Der zweite entfernt den Bindestrich vom ursprünglichen Domainnamen. Siehe Screenshot unten:

Wenn Sie ein oder mehrere Zeichen aus der ursprünglichen Zeichenfolge entfernen müssen, verwenden Sie eine leere SQL-Zeichenfolge als Ersatz. Auf diese Weise können Sie auch doppelte Datensätze in SQL löschen.

3. Sortierung beeinflusst die Ergebnisse von SQL REPLACE

Wenn Sie einen SQL Server installieren, wird eine Standardsortierung verwendet. Dies wird wiederum von Ihren Datenbanken und Tabellenspalten verwendet. Abbildung 2 zeigt die, die ich verwende:

Auf meinem Laptop verwende ich SQL_Latin1_CP1_CI_AS . Es handelt sich um eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung. (Siehe auch CI im Sortierungsnamen für c wie ich unempfindlich). Daher die Worte Hund , Hund , HUND , und dOg werden gleich behandelt.

Versuchen wir es in Aktion:

DECLARE @string VARCHAR(200) = 'Cats are great pets 
and so easy to take care of. They make good companions. 
Having a cat around is good for children.';

SELECT REPLACE(@string,'cat','dog');

Und das Ergebnis ist:

Die REPLACE-Funktion hat das Wort Katze gefunden in Katze s im ersten Satz und das Wort Katze im letzten Satz. Dabei spielt es keine Rolle, ob es sich um Groß- oder Kleinbuchstaben handelt.

Was passiert jedoch, wenn wir innerhalb von REPLACE eine Änderung der Sortierung in eine Sortierung mit Berücksichtigung der Groß-/Kleinschreibung erzwingen? Hier ist der Code, der COLLATE innerhalb von REPLACE verwendet:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

-- force a change to a case-sensitive collation. '_CS_' for case-sensitive
SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog'); 

Und hier ist die Ausgabe:

Sie sehen nun, wie sich die Sortierung auf das Ergebnis auswirkt. Katze und Katze werden jetzt anders behandelt. Der Absatz wird unübersichtlich. Die Lektion lautet also, die Sortierung mit Vorsicht zu verwenden.

4. Sie können SQL REPLACE verschachteln

Sie können die bereits ersetzten Wörter ersetzen, indem Sie die REPLACE-Funktion verschachteln. Hier ist ein Beispiel:

USE AdventureWorks
GO

SELECT 
 definition
,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
FROM sys.sql_modules a
INNER JOIN sys.objects b ON a.object_id = b.object_id
WHERE a.definition LIKE '%BusinessEntityID%'
AND b.type = 'P';

Im obigen Beispiel wurde ein REPLACE innerhalb eines REPLACE verwendet. Das soll CREATE PROCEDURE ändern VERFAHREN ÄNDERN dann BusinessEntityID zu BusinessEntityNo .

Die Abfrage wirkt sich auf gespeicherte Prozeduren aus, die die BusinessEntityID verwendet haben Säule. Dies ist nützlich, wenn Sie eine Spalte in einer Tabelle umbenennen und den betroffenen Datenbankcode ersetzen möchten. Parameter gespeicherter Prozeduren sind ebenfalls betroffen, aber Sie können sie ersetzen, um die Namenskonsistenz zu wahren.

Beachten Sie, dass Sie vor dem Ausführen der ALTER-Anweisungen die Änderungen überprüfen müssen, die angewendet werden. Du willst doch nichts vermasseln, oder?

In der Zwischenzeit kann das Verschachteln von REPLACE auch das Problem beheben, das wir zuvor bei cats hatten und Hunde . Hier ist die Lösung:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');

Sehen Sie sich das neue Ergebnis an:

Beachten Sie auch, dass das Großschreibungsproblem in Abbildung 3 ebenfalls behoben ist.

5. Mit UPDATE verwenden, um ersetzte Texte zu speichern

Bisher haben wir SQL REPLACE nur mit einer SELECT-Abfrage verwendet. Dadurch können wir nur die Ausgabe von REPLACE sehen. Um seine Ausgabe zu speichern, müssen Sie auch ein UPDATE ausgeben. Hier ist ein Beispiel:

USE AdventureWorks
GO

UPDATE Person.EmailAddress
 SET EmailAddress= REPLACE(EmailAddress,'-','');

Hier ist ein weiteres Beispiel für die Verwendung von MySQL mit den blog_posts Tabelle in WordPress. Sehen Sie, wie Sie eine private URL durch eine öffentliche ersetzen können:

-- View the possible results
SELECT 
 guid 
,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
FROM blog_posts
WHERE post_date > '2020-10-01';

-- Update the blog_posts table by replacing localhost with a fictitious URL
UPDATE blog_posts
set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
WHERE post_date > '2020-10-01';

Die Ergebnismenge für die erste obige Anweisung kann unten mit dbForge Studio für MySQL angezeigt werden:

Schlussfolgerung

So weit, ist es gut. Sie haben gesehen, was REPLACE in SQL in Aktion bewirken kann. Es kann Ideen geben, wenn Sie E-Mail-Adressen und URLs ändern müssen. wenn Sie eine Spalte in einer Tabelle umbenennen, die in einer gespeicherten Prozedur, Ansicht oder einem Synonym verwendet wird.

Fassen wir zusammen:

  • SQL REPLACE kann Text für ALLE Vorkommen ersetzen.
  • Es kann auch einen Teil des Textes entfernen.
  • Sortierungseinstellungen können die Ausgabe von REPLACE beeinflussen.
  • Sie können die Verwendung von SQL REPLACE verschachteln.
  • Zum Schluss mit UPDATE die ersetzten Texte speichern.

Wenn Ihnen dieser Beitrag gefällt, teilen Sie ihn bitte in Ihren bevorzugten sozialen Medien. Teilen Sie uns auch Ihre Meinung im Kommentarbereich unten mit.