I SQL Server kan du bruge T-SQL REPLACE()
funktion til at erstatte alle forekomster af en given streng med en anden streng. For eksempel kan du erstatte alle forekomster af et bestemt ord med et andet ord.
Syntaks
Her er den officielle syntaks:
REPLACE ( string_expression , string_pattern , string_replacement )
Hvor string_expression
er den streng, der indeholder en eller flere forekomster af strengen (eller understrengen), der skal erstattes, string_pattern
er strengen, der skal erstattes, og string_replacement
er strengen, der skal erstatte den.
Eksempel
Her er et eksempel til demonstration:
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 dette eksempel erstatter vi simpelthen ordet some
med ordet no
.
Flere ord
Selvfølgelig er der ingen regel, der siger, at du kun kan erstatte et ord med et ord (og omvendt). Når alt kommer til alt, erstatter vi simpelthen en streng med en anden streng, uanset om den indeholder ord, bogstaver, tal, mellemrum osv.
Så vi kunne sagtens have erstattet det ene ord med to eller flere 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å her erstatter vi ordet some
med ordene lots of
.
Fjern et Word
Du kan også fjerne et ord (eller understreng) fra strengen. For at gøre dette skal du blot erstatte den med den tomme streng:
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 hvis du ser godt efter, vil du se, at den nye streng indeholder dobbelte mellemrum, hvor vi fjernede ordet. Dette skyldes, at det ord, vi fjernede, havde mellemrum til venstre og højre. Vi fjernede ordet, men vi fjernede ingen mellemrum, derfor er der to mellemrum tilbage.
Vi kan rette dette ved at inkludere et af mellemrummene i ordet, der skal fjernes:
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.
Vær forsigtig!
Det er meget nemt at lave fejl, når du bruger REPLACE()
funktion (eller enhver). finde og erstatte funktionalitet for den sags skyld).
For eksempel denne fejl:
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, erstattede vi ordet art
med pictures
. Men i dette tilfælde ordet apartment
blev også påvirket – det er blevet til apicturesment
, hvilket ikke var tilsigtet. Dette skyldes, at ordet apartment
indeholder understrengen art
.
Du kan normalt sikre dig mod dette ved at tilføje mellemrum omkring søgeordet samt erstatningsordet:
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.
Dette forudsætter naturligvis, at du erstatter hele ordet. Du bliver nødt til at vurdere hver enkelt situation, efterhånden som den opstår.
Samling/store og store bogstaver
Du kan bruge den valgfri COLLATE
klausul for at anvende en eksplicit sammenstilling på inputtet. Dette kan være praktisk til udførelse af store og små bogstaver, find/erstat-operationer og lignende.
Her er et eksempel, der sammenligner to kollationer.
Uafhængig af store og små bogstaver
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');
Resultat:
Dogs, Dogs, and more Dogs!
I dette eksempel inkluderer den sortering, vi angiver, _CI
i dets navn, hvilket betyder "Uændret store og små bogstaver". Dette medfører, at alle forekomster erstattes, selvom den første forekomst har store bogstaver.
Du vil bemærke, at denne metode ikke påvirker tilfældet af den erstattede streng.
Stilling af store og små bogstaver
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');
Resultat:
Cats, Dogs, and more Dogs!
I dette eksempel inkluderer den sortering, vi angiver, _CS
i dets navn, hvilket betyder "Case Sensitive". Dette forårsager den første forekomst af Cat
skal springes over, fordi dets første tegn er et stort bogstav (som ikke svarer til store og små bogstaver i det andet argument).