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

Top 5 fakta til at finde og erstatte SQL-tekster i SQL Server med REPLACE-funktionen

Nutidens kodeeditorer og tekstbehandlere kommer med en søge- og erstat-funktion. Det er nyttigt, når du skal ændre et ord eller en gruppe af ord. Vi ønsker ikke at smide vores skriftlige arbejde væk for et mindre problem eller ændring.

Det samme gælder vores data. Brugere vil forbande os, hvis vi fortæller dem, at de skal redigere det, der skal omdøbes. Derfor er en søg og erstat-funktion også tilgængelig til at erstatte tekster skrevet i vores databaser. Her kommer REPLACE-kommandoen i SQL ind.

REPLACE-syntaksen i SQL er som følger:

UDSKIFT ( , , )

Bemærk, at alle parametre er nødvendige. Den kan være en streng-literal eller et strengresultat af et udtryk. I databasetabeller sender vi normalt en strengkolonne, hvor vi ønsker, at værdien skal ændres. I mellemtiden er en streng i du vil søge. Til sidst sender du en der erstatter . Simpelt nok, er det ikke?

Men der kan være nogle forbehold. På denne måde kan du finde ud af, hvordan du undgår at erstatte de forkerte ord, eller hvordan du undgår at indsætte duplikerede poster i SQL Serveren. Eller måske ikke erstatte de rigtige ord. Så roder dine data til sidst.

Er du ny til SQL REPLACE? Her er et GRATIS snydeark til dig. Indtast blot din e-mailadresse nedenfor, så sender vi den direkte til din indbakke.

Lyder fedt? Lad os grave ind.

[sendpulse-form id="12251″]

1. SQL REPLACE erstatter tekst for ALLE forekomster

Det er rigtigt. Det fejer hele din tekst med den streng, du vil søge efter. Lad mig vise dig det og forklare problemet. Tag et kig på nedenstående eksempel:

SELECT REPLACE('know the unknown','know','seek'); 
-- OUTPUT: 'seek the unseekn. Surprise!

ved streng eksisterer to gange, med ordene kend og uved n. Hvis du ikke er forsigtig, vil stavefejl snige sig ind i dine data. I stedet kan du tilføje plads til kun at søge efter komplette ord. Her er den ændrede kode:

SELECT REPLACE('know the unknown','know ','seek ');   
-- OUTPUT: 'seek the unknown'.

Meget bedre? Der kan være andre scenarier, men du forstår pointen.

2. SQL REPLACE kan fjerne tekster

Har du prøvet at erstatte et ord med ingenting i en teksteditor? Eller måske vil du fjerne dubletter i SQL? Det sker også i SQL REPLACE. Her er et eksempel:

USE AdventureWorks
GO

SELECT
 EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;

Den første kolonne indeholder det originale e-mailadressedomænenavn. Den anden fjerner bindestregen fra det originale domænenavn. Se skærmbilledet nedenfor:

Hvis du skal fjerne et eller flere tegn fra den originale streng, skal du bruge en tom SQL-streng som erstatning. Du kan også slette duplikerede poster i SQL på denne måde.

3. Sortering påvirker resultaterne af SQL REPLACE

Når du installerer en SQL Server, bruges en standardsortering. Til gengæld vil dette blive brugt af dine databaser og tabelkolonner. Figur 2 viser den, jeg bruger:

På min bærbare computer bruger jeg SQL_Latin1_CP1_CI_AS . Det er en sammenstilling, der ikke skiller mellem store og små bogstaver. (Se også CI i sorteringsnavnet for c som i ufølsom). Derfor ordene Hund , hund , HUND , og dOg vil blive behandlet på samme måde.

Lad os prøve det i aktion:

DECLARE @string VARCHAR(200) = 'Cats are great pets 
and so easy to take care of. They make good companions. 
Having a cat around is good for children.';

SELECT REPLACE(@string,'cat','dog');

Og resultatet er:

Udskiftningsfunktionen fandt ordet Kat i Cat s i den første sætning og ordet kat i sidste sætning. Det er irrelevant, om bogstaverne er store eller små.

Men hvis vi gennemtvinger en ændring i sammenstillingen til en følsomhed over for store og små bogstaver i REPLACE, hvad vil der så ske? Her er koden, der bruger COLLATE i REPLACE:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

-- force a change to a case-sensitive collation. '_CS_' for case-sensitive
SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog'); 

Og her er outputtet:

Du kan nu se, hvordan sortering påvirker resultatet. Kat og kat bliver nu behandlet anderledes. Afsnittet bliver forvirrende. Så lektionen er at bruge sortering med forsigtighed.

4. Du kan Nest SQL REPLACE

Du kan erstatte de ord, du allerede har erstattet, ved at indlejre REPLACE-funktionen. Her er et eksempel:

USE AdventureWorks
GO

SELECT 
 definition
,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
FROM sys.sql_modules a
INNER JOIN sys.objects b ON a.object_id = b.object_id
WHERE a.definition LIKE '%BusinessEntityID%'
AND b.type = 'P';

Eksemplet ovenfor brugte en REPLACE inden for en REPLACE. Det vil sige at ændre OPRET PROCEDURE til ÆNDRE PROCEDURE derefter BusinessEntityID til BusinessEntityNo .

Forespørgslen vil påvirke lagrede procedurer, der brugte BusinessEntityID kolonne. Dette er nyttigt, når du vil omdøbe en kolonne i en tabel og erstatte den berørte databasekode. Lagrede procedureparametre påvirkes også, men du kan vælge at erstatte dem for at bevare navngivningskonsistensen.

Bemærk, at før du udfører ALTER-sætningerne, skal du kontrollere de ændringer, der vil blive anvendt. Du vil ikke rode i tingene, vel?

I mellemtiden kan indlejring REPLACE også løse det problem, vi har tidligere på katte og hunde . Her er rettelsen:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');

Se det nye resultat:

Bemærk også, at problemet med store bogstaver i figur 3 også er løst.

5. Brug sammen med OPDATERING for at gemme erstattede tekster

Indtil videre har vi kun brugt SQL REPLACE med en SELECT-forespørgsel. Dette vil kun tillade os at se outputtet af REPLACE. For at gemme dets output skal du også udstede en OPDATERING. Her er et eksempel:

USE AdventureWorks
GO

UPDATE Person.EmailAddress
 SET EmailAddress= REPLACE(EmailAddress,'-','');

Her er et andet eksempel, der bruger MySQL, der involverer blog_posts tabel i WordPress. Se, hvordan du kan erstatte en privat URL med en offentlig:

-- View the possible results
SELECT 
 guid 
,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
FROM blog_posts
WHERE post_date > '2020-10-01';

-- Update the blog_posts table by replacing localhost with a fictitious URL
UPDATE blog_posts
set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
WHERE post_date > '2020-10-01';

Resultatsættet for det første udsagn ovenfor kan ses nedenfor ved hjælp af dbForge Studio til MySQL:

Konklusion

Så langt så godt. Du så, hvad REPLACE i SQL kan gøre i aktion. Det kan give ideer, når du skal ændre mailadresser og URL'er. hvis du omdøber en kolonne i en tabel, der bruges i en lagret procedure, visning eller synonym.

Lad os få en opsummering:

  • SQL REPLACE kan erstatte tekst for ALLE forekomster.
  • Den kan også fjerne en del af teksten.
  • Sorteringsindstillinger kan påvirke outputtet af REPLACE.
  • Du kan indlejre brugen af ​​SQL REPLACE.
  • Brug endelig OPDATERING til at gemme de erstattede tekster.

Hvis du kan lide dette opslag, så del det på dine foretrukne sociale medier. Fortæl os også, hvad du synes, i kommentarfeltet nedenfor.


  1. APPEND_ONLY_STORAGE_INSERT_POINT-låsen

  2. Lagring af filer i SQL Server

  3. Værtspakke på Chokolade

  4. SQL Server:Gør alle store og små bogstaver til store og små bogstaver/bogstaver