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