sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan erstattes alle forekomster af en streng med en anden streng i SQL Server – REPLACE()

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


  1. Få styr på native Oracle Connection i Hibernate 4 for at køre en lagret proc

  2. NULL vs. 'uendeligt' i PostgreSQL-områdetyper

  3. Mysql 1050-fejltabel eksisterer allerede, mens den faktisk ikke gør det

  4. Sådan fungerer REGEXP_REPLACE() i MariaDB