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

Primi 5 fatti per trovare e sostituire testi SQL in SQL Server con la funzione REPLACE

Gli editor di codice e gli elaboratori di testi di oggi sono dotati di una funzione di ricerca e sostituzione. È utile quando è necessario modificare una parola o un gruppo di parole. Non vogliamo buttare via il nostro lavoro scritto per un piccolo problema o cambiamento.

La stessa cosa vale per i nostri dati. Gli utenti ci malediranno se diciamo loro di modificare ciò che deve essere rinominato. Ecco perché è disponibile anche una funzione di ricerca e sostituzione per sostituire i testi scritti nei nostri database. Qui entra in gioco il comando REPLACE in SQL.

La sintassi REPLACE in SQL è la seguente:

SOSTITUIRE ( , , )

Si noti che tutti i parametri sono obbligatori. La può essere una stringa letterale o una stringa risultato di un'espressione. Nelle tabelle del database, di solito passiamo una colonna di stringa in cui vogliamo che il valore cambi. Nel frattempo, è una stringa all'interno di vuoi cercare. Infine, passi una che sostituirà . Semplice, abbastanza, no?

Ma ci possono essere alcuni avvertimenti. In questo modo puoi scoprire come evitare di sostituire le parole sbagliate o come evitare di inserire record duplicati in SQL Server. O, forse, non sostituire le parole giuste. Quindi alla fine hai rovinato i tuoi dati.

Non conosci SQL REPLACE? Ecco un cheat sheet GRATUITO per te. Inserisci il tuo indirizzo email qui sotto e lo invieremo direttamente alla tua casella di posta.

Sembra fantastico? Acquistiamoci.

[sendpulse-form id=”12251″]

1. SQL REPLACE Sostituisce il testo per TUTTE le occorrenze

Giusto. Scorre l'intero testo con la stringa che desideri cercare. Lascia che te lo mostri e spieghi il problema. Dai un'occhiata all'esempio seguente:

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

Il sa la stringa esiste due volte, nelle parole conoscere e non sapere n. Se non stai attento, gli errori di ortografia si insinueranno nei tuoi dati. Invece, puoi aggiungere spazio per cercare solo parole complete. Ecco il codice modificato:

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

Molto meglio? Possono esserci altri scenari, ma hai capito.

2. SQL REPLACE può rimuovere testi

Hai provato a sostituire una parola con niente in un editor di testo? O forse vuoi rimuovere i duplicati in SQL? Succede anche in SQL REPLACE. Ecco un esempio:

USE AdventureWorks
GO

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

La prima colonna contiene il nome di dominio dell'indirizzo email originale. Il secondo rimuove il trattino dal nome di dominio originale. Vedi lo screenshot qui sotto:

Se è necessario rimuovere uno o più caratteri dalla stringa originale, utilizzare una stringa SQL vuota in sostituzione. Puoi anche eliminare i record duplicati in SQL in questo modo.

3. Le regole di confronto influiscono sui risultati di SQL REPLACE

Quando si installa un SQL Server, vengono utilizzate regole di confronto predefinite. A sua volta, questo verrà utilizzato dai database e dalle colonne della tabella. La figura 2 mostra quello che uso:

Sul mio laptop, utilizzo SQL_Latin1_CP1_CI_AS . È una raccolta senza distinzione tra maiuscole e minuscole. (Vedi anche CI nel nome della confronto per c come io nsensibile). Da qui le parole Cane , cane , Cane e dOg sarà trattato allo stesso modo.

Proviamolo in azione:

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');

E il risultato è:

La funzione REPLACE ha trovato la parola Cat in Gatto s nella prima frase e la parola gatto nell'ultima frase. È irrilevante se le lettere sono maiuscole o minuscole.

Tuttavia, se imponiamo una modifica nelle regole di confronto a una con distinzione tra maiuscole e minuscole all'interno di REPLACE, cosa accadrà? Ecco il codice che utilizza COLLATE in 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'); 

Ed ecco l'output:

Ora puoi vedere come le regole di confronto influiscono sul risultato. Gatto e gatto ora vengono trattati in modo diverso. Il paragrafo diventa confuso. Quindi, la lezione è usare le regole di confronto con cautela.

4. Puoi Nest SQL REPLACE

Puoi sostituire le parole che hai già sostituito annidando la funzione REPLACE. Ecco un esempio:

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';

L'esempio precedente ha utilizzato un REPLACE all'interno di un REPLACE. Vale a dire modificare CREA PROCEDURA a ALTER PROCEDURE quindi BusinessEntityID a BusinessEntityNo .

La query influirà sulle stored procedure che hanno utilizzato BusinessEntityID colonna. Ciò è utile quando si desidera rinominare una colonna in una tabella e sostituire il codice del database interessato. Anche i parametri della stored procedure sono interessati, ma puoi scegliere di sostituirli per preservare la coerenza dei nomi.

Si noti che prima di eseguire le istruzioni ALTER è necessario verificare le modifiche che verranno applicate. Non vuoi rovinare le cose, vero?

Nel frattempo, il nesting REPLACE può anche risolvere il problema che abbiamo riscontrato in precedenza su gatti e cani . Ecco la soluzione:

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');

Scopri il nuovo risultato:

Si noti inoltre che anche il problema della capitalizzazione nella Figura 3 è stato risolto.

5. Utilizzare con UPDATE per memorizzare i testi sostituiti

Finora, abbiamo utilizzato solo SQL REPLACE con una query SELECT. Questo ci consentirà solo di vedere l'output di REPLACE. Per memorizzare il suo output, devi anche emettere un UPDATE. Ecco un esempio:

USE AdventureWorks
GO

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

Ecco un altro esempio di utilizzo di MySQL che coinvolge i blog_posts tabella in WordPress. Scopri come sostituire un URL privato con uno pubblico:

-- 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';

Il set di risultati per la prima istruzione sopra può essere visto di seguito usando dbForge Studio per MySQL:

Conclusione

Fin qui tutto bene. Hai visto cosa può fare REPLACE in SQL in azione. Può dare idee quando è necessario modificare indirizzi e-mail e URL. se si rinomina una colonna in una tabella utilizzata in una stored procedure, vista o sinonimo.

Ricapitoliamo:

  • SQL REPLACE può sostituire il testo per TUTTE le occorrenze.
  • Può anche rimuovere una parte del testo.
  • Le impostazioni di fascicolazione possono influire sull'output di REPLACE.
  • Puoi nidificare l'uso di SQL REPLACE.
  • Infine, usa UPDATE per memorizzare i testi sostituiti.

Se ti piace questo post, condividilo sui tuoi social media preferiti. Facci sapere cosa ne pensi anche nella sezione commenti qui sotto.