sql >> Database >  >> RDS >> Sqlserver

Top 5 feiten voor het zoeken en vervangen van SQL-teksten in SQL Server met de REPLACE-functie

De huidige code-editors en tekstverwerkers worden geleverd met een zoek- en vervangfunctie. Dit is handig wanneer u een woord of een groep woorden moet wijzigen. We willen ons geschreven werk niet weggooien voor een klein probleem of een wijziging.

Hetzelfde geldt voor onze gegevens. Gebruikers zullen ons vervloeken als we ze vertellen om te bewerken wat moet worden hernoemd. Daarom is er ook een zoek- en vervangfunctie beschikbaar om teksten in onze databases te vervangen. Hier komt het REPLACE-commando in SQL binnen.

De REPLACE-syntaxis in SQL is als volgt:

VERVANG ( , , )

Merk op dat alle parameters vereist zijn. De kan een letterlijke tekenreeks zijn of een tekenreeksresultaat van een uitdrukking. In databasetabellen geven we meestal een tekenreekskolom door waarin we de waarde willen wijzigen. Ondertussen is een string binnen u wilt zoeken. Ten slotte geef je een . door dat vervangt . Simpel genoeg, toch?

Maar er kunnen enkele kanttekeningen worden geplaatst. Zo komt u te weten hoe u voorkomt dat u de verkeerde woorden vervangt of hoe u dubbele records in de SQL Server voorkomt. Of misschien niet de juiste woorden vervangen. Dan verpesten je gegevens uiteindelijk.

Bent u nieuw bij SQL REPLACE? Hier is een GRATIS spiekbriefje voor jou. Vul hieronder je e-mailadres in en we sturen het rechtstreeks naar je inbox.

Klinkt goed? Laten we graven.

[sendpulse-form id=”12251″]

1. SQL REPLACE vervangt tekst voor ALLE gebeurtenissen

Dat klopt. Het veegt uw hele tekst met de tekenreeks die u wilt doorzoeken. Ik zal het u laten zien en het probleem uitleggen. Bekijk het onderstaande voorbeeld:

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

De weten string bestaat twee keer, in de woorden know en nietweet n. Als u niet oppast, kruipen er spelfouten in uw gegevens. In plaats daarvan kunt u ruimte toevoegen om alleen naar volledige woorden te zoeken. Hier is de aangepaste code:

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

Veel beter? Er kunnen andere scenario's zijn, maar u begrijpt het punt.

2. SQL REPLACE kan teksten verwijderen

Heb je geprobeerd een woord te vervangen door niets in een teksteditor? Of misschien wilt u duplicaten in SQL verwijderen? Het gebeurt ook in SQL REPLACE. Hier is een voorbeeld:

USE AdventureWorks
GO

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

De eerste kolom bevat de originele domeinnaam van het e-mailadres. De tweede verwijdert het koppelteken van de oorspronkelijke domeinnaam. Zie de onderstaande schermafbeelding:

Als u een of meer tekens uit de oorspronkelijke tekenreeks moet verwijderen, gebruikt u een lege SQL-tekenreeks ter vervanging. U kunt op deze manier ook dubbele records in SQL verwijderen.

3. Sorteren heeft invloed op de resultaten van SQL REPLACE

Wanneer u een SQL Server installeert, wordt een standaardsortering gebruikt. Dit wordt op zijn beurt gebruikt door uw databases en tabelkolommen. Afbeelding 2 toont degene die ik gebruik:

Op mijn laptop gebruik ik SQL_Latin1_CP1_CI_AS . Het is een hoofdletterongevoelige sortering. (Zie ook CI in de sorteernaam voor c als ik ongevoelig). Vandaar de woorden Hond , hond , HOND , en dOg zal hetzelfde worden behandeld.

Laten we het in actie proberen:

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');

En het resultaat is:

De functie VERVANGEN vond het woord Kat in Kat s in de eerste zin en het woord kat in de laatste zin. Het maakt niet uit of de letters hoofdletters of kleine letters zijn.

Als we echter een wijziging in de sortering forceren naar een hoofdlettergevoelige sortering binnen REPLACE, wat gebeurt er dan? Hier is de code die COLLATE gebruikt in REPLACE:

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'); 

En hier is de output:

U ziet nu hoe collatie het resultaat beïnvloedt. Kat en kat worden nu anders behandeld. De alinea wordt verwarrend. De les is dus om voorzichtig te zijn met het sorteren.

4. U kunt SQL VERVANGEN nesten

U kunt de woorden die u al hebt vervangen vervangen door de functie VERVANGEN te nesten. Hier is een voorbeeld:

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';

In het bovenstaande voorbeeld werd een REPLACE gebruikt binnen een REPLACE. Dat is het veranderen van PROCEDURE MAKEN om PROCEDURE TE WIJZIGEN dan BusinessEntityID naar BusinessEntityNo .

De query is van invloed op opgeslagen procedures die de BusinessEntityID . hebben gebruikt kolom. Dit is handig als u de naam van een kolom in een tabel wilt wijzigen en de betreffende databasecode wilt vervangen. Opgeslagen procedureparameters worden ook beïnvloed, maar u kunt ervoor kiezen om ze te vervangen om de naamgevingsconsistentie te behouden.

Merk op dat voordat u de ALTER-instructies uitvoert, u de wijzigingen moet controleren die worden toegepast. Je wilt de boel toch niet verpesten, of wel?

Ondertussen kan het nesten van REPLACE ook het probleem oplossen dat we eerder hadden met katten en honden . Hier is de oplossing:

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');

Bekijk het nieuwe resultaat:

Merk ook op dat het hoofdletterprobleem in figuur 3 ook is opgelost.

5. Gebruik met UPDATE om vervangen teksten op te slaan

Tot nu toe hebben we alleen SQL REPLACE gebruikt met een SELECT-query. Hierdoor kunnen we alleen de uitvoer van REPLACE zien. Om de uitvoer op te slaan, moet u ook een UPDATE uitgeven. Hier is een voorbeeld:

USE AdventureWorks
GO

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

Hier is nog een voorbeeld van het gebruik van MySQL met de blog_posts tabel in WordPress. Bekijk hoe u een privé-URL kunt vervangen door een openbare:

-- 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';

De resultatenset voor de eerste verklaring hierboven kan hieronder worden bekeken met dbForge Studio voor MySQL:

Conclusie

Tot zover goed. Je zag wat REPLACE in SQL in actie kan doen. Het kan ideeën geven wanneer u e-mailadressen en URL's moet wijzigen. als u een kolom hernoemt in een tabel die wordt gebruikt in een opgeslagen procedure, weergave of synoniem.

Laten we het even samenvatten:

  • SQL REPLACE kan tekst vervangen voor ALLE exemplaren.
  • Het kan ook een deel van de tekst verwijderen.
  • Collatie-instellingen kunnen de uitvoer van REPLACE beïnvloeden.
  • U kunt het gebruik van SQL REPLACE nesten.
  • Gebruik ten slotte UPDATE om de vervangen teksten op te slaan.

Als je dit bericht leuk vindt, deel het dan op je favoriete sociale media. Laat ons ook weten wat je ervan vindt in de comments hieronder.


  1. Kan ik Postgresql vragen fouten binnen een transactie te negeren?

  2. TO_TIMESTAMP() Functie in Oracle

  3. Minimale waarden in kolommen vinden

  4. Wat is er nieuw in MariaDB Cluster 10.4