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

Come sostituire tutte le occorrenze di una stringa con un'altra stringa in SQL Server – REPLACE()

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