In SQL Server è possibile utilizzare T-SQL REPLACE()
funzione per sostituire tutte le istanze di una determinata stringa con un'altra stringa. Ad esempio, puoi sostituire tutte le occorrenze di una determinata parola con un'altra parola.
Sintassi
Ecco la sintassi ufficiale:
REPLACE ( string_expression , string_pattern , string_replacement )
Dove string_expression
è la stringa che contiene una o più istanze della stringa (o sottostringa) da sostituire, string_pattern
è la stringa da sostituire e string_replacement
è la stringa per sostituirla.
Esempio
Ecco un esempio da dimostrare:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');
Risultato:
My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.
Quindi in questo esempio sostituiamo semplicemente la parola some
con la parola no
.
Parole multiple
Naturalmente, non esiste una regola che dice che puoi sostituire una parola solo con una parola (e viceversa). Dopotutto, stiamo semplicemente sostituendo una stringa con un'altra stringa, indipendentemente dal fatto che quella stringa contenga parole, lettere, numeri, spazi, ecc.
Quindi avremmo potuto facilmente sostituire quella parola con due o più parole:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');
Risultato:
My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.
Quindi qui sostituiamo la parola some
con le parole lots of
.
Rimuovi una parola
Puoi anche rimuovere una parola (o una sottostringa) dalla stringa. Per fare ciò, sostituiscilo semplicemente con la stringa vuota:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
Risultato:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Tuttavia, se guardi da vicino, vedrai che la nuova stringa contiene doppi spazi in cui abbiamo rimosso la parola. Questo perché la parola che abbiamo rimosso aveva spazi a sinistra ea destra. Abbiamo rimosso la parola ma non abbiamo rimosso gli spazi, quindi rimangono due spazi.
Possiamo risolvere questo problema includendo uno degli spazi nella parola da rimuovere:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');
Risultato:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Attenzione!
È molto facile commettere errori quando si utilizza REPLACE()
funzione (o qualsiasi trova e sostituisci funzionalità per quella materia).
Ad esempio, questo errore:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
Risultato:
My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Come puoi vedere, abbiamo sostituito la parola art
con pictures
. Tuttavia, in questo caso la parola apartment
è stato anche colpito:si è trasformato in apicturesment
, che non era previsto. Questo perché la parola apartment
contiene la sottostringa art
.
Di solito puoi proteggerti da questo aggiungendo spazi intorno alla parola di ricerca, così come la parola sostitutiva:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');
Risultato:
My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Questo ovviamente presuppone che stai sostituendo l'intera parola. Dovrai valutare ogni situazione man mano che si presenta.
Fascicolazione/Maiuscole/minuscole
Puoi utilizzare l'opzione COLLATE
clausola per applicare un confronto esplicito all'input. Questo può essere utile per eseguire operazioni di ricerca/sostituzione con distinzione tra maiuscole e minuscole e simili.
Ecco un esempio che confronta due regole di confronto.
Maiuscole/minuscole
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');
Risultato:
Dogs, Dogs, and more Dogs!
In questo esempio, le regole di confronto che specifichiamo includono _CI
nel suo nome, che significa "Case Insensitive". Ciò provoca la sostituzione di tutte le occorrenze, nonostante la prima occorrenza abbia caratteri maiuscoli.
Noterai che questo metodo non influisce sul caso della stringa sostituita.
Maiuscole/minuscole
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');
Risultato:
Cats, Dogs, and more Dogs!
In questo esempio, le regole di confronto che specifichiamo includono _CS
nel suo nome, che significa "Case Sensitive". Questo provoca la prima occorrenza di Cat
da saltare, perché il suo primo carattere è una lettera maiuscola (che non corrisponde al caso del secondo argomento).