sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ersätter alla förekomster av en sträng med en annan sträng i SQL Server – REPLACE()

I SQL Server kan du använda T-SQL REPLACE() funktion för att ersätta alla instanser av en given sträng med en annan sträng. Du kan till exempel ersätta alla förekomster av ett visst ord med ett annat ord.

Syntax

Här är den officiella syntaxen:

REPLACE ( string_expression , string_pattern , string_replacement )

Där string_expression är strängen som innehåller en eller flera instanser av strängen (eller delsträngen) som ska ersättas, string_pattern är strängen som ska ersättas och string_replacement är strängen som ska ersätta den.

Exempel

Här är ett exempel att visa:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Resultat:

My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

Så i det här exemplet ersätter vi helt enkelt ordet some med ordet no .

Flera ord

Naturligtvis finns det ingen regel som säger att du bara kan ersätta ett ord med ett ord (och vice versa). När allt kommer omkring ersätter vi helt enkelt en sträng med en annan sträng, oavsett om den innehåller ord, bokstäver, siffror, mellanslag osv.

Så vi kunde lätt ha ersatt det där ordet med två eller flera ord:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Resultat:

My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

Så här ersätter vi ordet some med orden lots of .

Ta bort ett ord

Du kan också ta bort ett ord (eller delsträng) från strängen. För att göra detta, ersätt den helt enkelt med den tomma strängen:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Resultat:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Men om du tittar noga ser du att den nya strängen innehåller dubbla mellanslag där vi tog bort ordet. Detta beror på att ordet som vi tog bort hade mellanslag till vänster och höger. Vi tog bort ordet men vi tog inte bort några mellanslag, därför återstår två blanksteg.

Vi kan fixa detta genom att inkludera ett av mellanslagen i ordet som ska tas bort:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');

Resultat:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Var försiktig!

Det är väldigt lätt att göra misstag när du använder REPLACE() funktion (eller vilken som helst hitta och ersätta funktionalitet för den delen).

Till exempel detta misstag:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Resultat:

My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Som du kan se ersatte vi ordet art med pictures . Men i det här fallet ordet apartment påverkades också – det har förvandlats till apicturesment , vilket inte var avsett. Detta beror på att ordet apartment innehåller delsträngen art .

Du kan vanligtvis skydda dig mot detta genom att lägga till mellanslag runt sökordet, samt ersättningsordet:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');

Resultat:

My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Detta förutsätter uppenbarligen att du ersätter hela ordet. Du måste bedöma varje situation när den uppstår.

Sortering/skiftlägeskänslighet

Du kan använda den valfria COLLATE klausul för att tillämpa en explicit sammanställning på indata. Detta kan vara praktiskt för att utföra skiftlägeskänsliga sök-/ersättoperationer och liknande.

Här är ett exempel som jämför två sorteringar.

skiftlägeskänslig

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

Resultat:

Dogs, Dogs, and more Dogs!

I det här exemplet inkluderar sorteringen vi anger _CI i dess namn, vilket betyder "skiftlägesokänslig". Detta gör att alla förekomster ersätts, trots att den första förekomsten har versaler.

Du kommer att märka att den här metoden inte påverkar fallet med den ersatta strängen.

skiftlägeskänslig

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

Resultat:

Cats, Dogs, and more Dogs!

I det här exemplet inkluderar sorteringen vi anger _CS i dess namn, vilket betyder "skiftlägeskänslig". Detta orsakar den första förekomsten av Cat ska hoppas över, eftersom dess första tecken är en stor bokstav (som inte matchar skiftläge för det andra argumentet).


  1. Oracle-certifieringar

  2. Hur får jag min Java-applikation att identifiera sig för Oracle vid anslutning?

  3. Hur skriver man UPPDATERA SQL med tabellalias i SQL Server 2008?

  4. JSON_KEYS() – Returnera nycklarna från ett JSON-objekt i MySQL