Esempio di utilizzo della funzione SQL replace per eliminare caratteri speciali

La funzione SQL Replace: come e quando usarla

Il linguaggio SQL dispone di numerose funzione per manipolare e gestire stringhe di testo. In questo articolo vedremo in particolare come usare la funzione SQL Replace. La funzione replace ci permette di sostituire uno o più caratteri presenti in una colonna di tipo stringa (ad esempio varchar o nvarchar).

Funzione Replace su Sql Server: sintassi

La funzione T-SQL Replace richiede tre argomenti, tutti obbligatori:

  • la colonna o il valore in cui effettuare la sostituzione
  • il testo da sostituire
  • il testo con cui effettuare la sostituzione

Vediamo un esempio:

SELECT REPLACE(‘testo’,’t’,’b’) as TestoModificato

L’output di questa query sarà la stringa “besbo”. Osserviamo che entrambi i caratteri “t” presenti nel testo sono stati sostituiti da una b. Se le impostazioni di default non vengono modificate, i database creati su Sql Server non sono case sensitive. Di conseguenza effettuando la replace alla parola Testo con la prima t maiuscolo, otterremmo lo stesso risultato: una doppia sostituzione di entrambe le t (sia la maiuscola che la minuscola) in b.

Nel caso in cui volessimo effettuare una sostituzione Case Sensitive, senza dover ovviamente modificare l’impostazione generale di tutto il database, possiamo usare la sintassi COLLATE all’interno del primo argomento della funzione. Ad esempio la query

SELECT REPLACE(‘Testo’ COLLATE Latin1_General_CS_AS ,’t’,’b’) as TestoModificato

restituirà come output Tesbo, con soltanto la t minuscola sostituita.

 

Come usare la funzione Replace per eliminare i caratteri speciali in SQL

La funzione Replace può essere utilizzata in modo astuto anche per eliminare un particolare carattere. Basterà infatti specificare come terzo argomento la stringa vuota.  Ad esempio

SELECT REPLACE(‘testo’,’t’,”) as TestoModificato

restituirà est. Tramite questa idea la funzione Replace viene spesso utilizzata per “pulire” le stringhe dai caratteri speciali. Tuttavia l’approccio usualmente utilizzato di annidare varie funzione replace una dentro l’altro risulta essere poco leggibile e manutenibile. Il seguente codice ad esempio elimina dalla variabile testo alcuni caratteri di punteggiatura. Tuttavia risulta di difficile comprensione e modifica.

Declare @stringa varchar(50) = ‘!Testo.’

SELECT REPLACE(REPLACE(REPLACE(REPLACE(@stringa,’.’,”),’,’,”),’!’,”) ,’?’,”)

Su Sql Server un differente approccio potrebbe consistere nel creare una tabella contenente i caratteri speciali.

CREATE TABLE CaratteriSpeciali (Valore varchar(50))
GO
INSERT INTO CaratteriSpeciali(Valore)
VALUES (‘.’),(‘,’),(‘?’),(‘!’)

A questo punto la rimozione può essere fatta iterando l’assegnazione della variabile contenente la stringa iniziale tramite la tabella contenente i caratteri speciali. Riportiamo anche in questo caso il codice che risulta più chiaro di mille spiegazioni

Declare @stringa varchar(50) = ‘!Testo.’

SELECT @stringa=REPLACE(@stringa,Valore,”)
FROM CaratteriSpeciali

SELECT @stringa

Tale codice può essere ovviamente salvato in una UDF che può essere poi applicata direttamente ai valori delle colonne di una tabella (attenzione però alle performance).

Su Oracle abbiamo invece a disposizione la potentissima funzione REGEXP_REPLACE. Possiamo raggiungere lo stesso risultato precedente con uno sforzo molto minore utilizzando le espressioni regolari, ad esempio in questo modo

SELECT REGEXP_REPLACE(‘!Testo.’, ‘[.,!?]’,”)
FROM DUAL;

A questo link trovi la documentazione completa di Oracle su regexp_replace.

 

Funzione Replace su Oracle: sintassi

Torniamo su Oracle per sottolineare una piccola differenza a livello di sintassi. Il terzo parametro della funzione infatti è opzionale, se non specificato l’effetto sarà quello di eliminare tutte le occorrenze del carattere specificato nel secondo argomento. Inoltre ricordiamo che di default i database Oracle sono case sensitive, di conseguenza occorre fare particolare attenzione all’utilizzo di maiuscole e minuscole che risulta determinante nel risultato della query.

 

Impatto della funzione Replace nella creazione di una nuova tabella

Studiamo infine un ultimo caso rilevante in cui la funzionie replace è utilizzata all’interno di un costrutto SELECT – INTO per creare e popolare contemporaneamente una tabella. Lanciamo il seguente codice

Declare @stringa varchar(50) = ‘Testo’

SELECT REPLACE(@stringa,’t’,’b’) as Valore
into #test
GO;
USE tempdb;
GO;
sp_help #test

Un po’ a sorpresa noteremo che la colonna Valore sarà creata con il tipo varchar(8000). Possiamo evitare questo comportamento inserendo prima della Replace la funzione Convert.

 

Utilizzo della funzione Replace, e adesso?

Se cerchi un manuale per imparare a scrivere una query, puoi scaricare gratuitamente e senza registrazione il mio eBook a questo link. Se sei interessato ad un corso sul linguaggio SQL puoi invece visitare le pagine del corso base https://www.yimp.it/corso-introduzione-sql-database-relazionali/ e del corso intermedio https://www.yimp.it/sviluppo-database-sql-server-esame-70-761/.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Torna su