sql >> Database >  >> RDS >> Sqlserver

Hoe u alle gebeurtenissen van een tekenreeks kunt vervangen door een andere tekenreeks in SQL Server - REPLACE()

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).


  1. Hoe krijg ik het aantal elementen in een JSON-array opgeslagen als CLOB met Oracle 12c?

  2. Hoe GET_FORMAT() werkt in MariaDB

  3. Manieren om SQL Server Database te migreren naar Azure SQL Database

  4. MySQL in de cloud - voor- en nadelen van Amazon RDS