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