In SQL Server kunt u de T-SQL REPLACE()
. gebruiken functie om alle instanties van een bepaalde string te vervangen door een andere string. U kunt bijvoorbeeld alle voorkomens van een bepaald woord vervangen door een ander woord.
Syntaxis
Dit is de officiële syntaxis:
REPLACE ( string_expression , string_pattern , string_replacement )
Waar string_expression
is de tekenreeks die een of meer exemplaren van de tekenreeks (of subtekenreeks) bevat die moet worden vervangen, string_pattern
is de string die moet worden vervangen, en string_replacement
is de string om het te vervangen.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');
Resultaat:
My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.
Dus in dit voorbeeld vervangen we gewoon het woord some
met het woord no
.
Meerdere woorden
Natuurlijk is er geen regel die zegt dat je een woord slechts door één woord kunt vervangen (en vice versa). We vervangen immers gewoon een string door een andere string, ongeacht of die string woorden, letters, cijfers, spaties, enz. bevat.
We hadden dat ene woord dus gemakkelijk kunnen vervangen door twee of meer woorden:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');
Resultaat:
My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.
Dus hier vervangen we het woord some
met de woorden lots of
.
Een woord verwijderen
U kunt ook een woord (of subtekenreeks) uit de tekenreeks verwijderen. Om dit te doen, vervangt u het gewoon door de lege tekenreeks:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
Resultaat:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Als u echter goed kijkt, ziet u dat de nieuwe tekenreeks dubbele spaties bevat waar we het woord hebben verwijderd. Dit komt omdat het woord dat we hebben verwijderd spaties links en rechts had. We hebben het woord verwijderd, maar we hebben geen spaties verwijderd, daarom blijven er twee spaties over.
We kunnen dit oplossen door een van de spaties in het te verwijderen woord op te nemen:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
Resultaat:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Wees voorzichtig!
Het is heel gemakkelijk om fouten te maken bij het gebruik van de REPLACE()
functie (of elke zoek en vervang functionaliteit trouwens).
Bijvoorbeeld deze fout:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
Resultaat:
My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Zoals je kunt zien, hebben we het woord art
vervangen met pictures
. In dit geval echter het woord apartment
werd ook getroffen – het is veranderd in apicturesment
, wat niet de bedoeling was. Dit komt omdat het woord apartment
bevat de substring art
.
U kunt dit meestal voorkomen door spaties toe te voegen rond het zoekwoord, evenals het vervangende woord:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');
Resultaat:
My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Dit veronderstelt uiteraard dat je het hele woord vervangt. Je moet elke situatie inschatten wanneer deze zich voordoet.
Collatie/Hoofdlettergevoeligheid
U kunt de optionele COLLATE
. gebruiken clausule om een expliciete sortering op de invoer toe te passen. Dit kan handig zijn voor het uitvoeren van hoofdlettergevoelige zoek-/vervangbewerkingen en dergelijke.
Hier is een voorbeeld dat twee sorteringen vergelijkt.
Hoofdlettergevoelig
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');
Resultaat:
Dogs, Dogs, and more Dogs!
In dit voorbeeld bevat de sortering die we specificeren _CI
in zijn naam, wat "hoofdlettergevoelig" betekent. Hierdoor worden alle vermeldingen vervangen, ondanks dat de eerste instantie hoofdletters heeft.
U zult merken dat deze methode geen invloed heeft op het geval van de vervangen tekenreeks.
Hoofdlettergevoelig
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');
Resultaat:
Cats, Dogs, and more Dogs!
In dit voorbeeld bevat de sortering die we specificeren _CS
in zijn naam, wat "Hoofdlettergevoelig" betekent. Dit veroorzaakt het eerste voorkomen van Cat
moet worden overgeslagen, omdat het eerste teken een hoofdletter is (wat niet overeenkomt met het geval van het tweede argument).