Quando si eseguono query sui dati con SQL, la necessità di manipolare i risultati basati su stringhe è molto comune. Ci sono molte opzioni nei principali sistemi di database relazionali per questa attività. In questo articolo, discuteremo il caso d'uso e la funzionalità della funzione REPLACE SQL.
Guida introduttiva a REPLACE
La funzionalità TROVA e SOSTITUISCI è ben nota a tutti in quanto viene fornita con qualsiasi editor di testo. ANSI SQL offre la funzionalità REPLACE sotto forma di una funzione di sistema incorporata. In questo articolo, utilizzerò SQL Server come RDMS preferito.
RSPOSTA Parametri di funzione
REPLACE (espressione_stringa, pattern_stringa, sostituzione_stringa)
Espressione_stringa è una stringa che verrà trasformata, può essere una singola stringa o una colonna da una query SQL in entrata.
String_pattern è un modello di ricerca che viene applicato all'espressione stringa da sostituire.
Sostituzione_stringa è un valore di sostituzione applicato alla stringa quando è string _pattern corrisponde a espressione_stringa .
Diamo un'occhiata a diversi esempi per comprendere meglio la funzionalità REPLACE.
Creazione di dati di esempio
Per questo esempio, creerò una tabella temporanea da utilizzare con la funzione REPLACE. I nomi delle colonne corrisponderanno ai valori dei parametri della funzione.
IF OBJECT_ID(N'tempdb..#TEMP_REPLACE_DEMO') IS NOT NULL
DROP TABLE #TEMP_REPLACE_DEMO
CREATE TABLE #TEMP_REPLACE_DEMO
(
ID INT IDENTITY(1,1),
STRING_EXPRESSION VARCHAR(2000),
STRING_PATTERN VARCHAR(200),
STRING_REPLACEMENT VARCHAR(200)
)
--REPLACE THE VALUE CAR WITH FOX
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('The red car is the fastest car in the race.','car','fox')
--REPLACE THE VALUE 4 WITH 8
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('There are 4 model ford cars in the parking lot.','4','8')
--REMOVE THE BLANK SPACE CHARACTER
INSERT INTO #TEMP_REPLACE_DEMO
VALUES(' This sentence has irregular spacing . ',' ','')
RSPOSTA semplice e dinamico Esempi
Ora che la tabella è stata caricata con alcuni dati di esempio, esaminiamo come REPLACE la funzione può essere applicata ai dati a livello di base e quindi in una capacità più dinamica.
Nel primo esempio, i parametri sono codificati come valori di stringa nella funzione.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
I valori possono anche essere letti dalla tabella in modo dinamico. In questo caso, i valori di espressione, modello e sostituzione vengono tutti letti direttamente dalla tabella invece di essere codificati.
--DYNAMIC EXAMPLE FOR ALL COLUMNS IN THE TABLE.
SELECT ID,REPLACE(STRING_EXPRESSION,STRING_PATTERN,STRING_REPLACEMENT) AS RESULT_FOR_TABLE
FROM #TEMP_REPLACE_DEMO
I risultati per l'ID 1 sono gli stessi dell'esempio sopra, l'unica differenza è che i valori sono stati letti dalle singole colonne.
Sostituzioni nidificate
La funzione REPLACE può essere utilizzata anche in una capacità nidificata. Ciò significa che i risultati della funzione REPLACE interna possono diventare il parametro STRING_EXPRESSION della funzione di sostituzione esterna.
Ecco alcuni esempi di questo modello sui dati di esempio:
--REPLACE THE VALUE CAR WITH FOX | REPLACE THE VALUE "fastest" WITH "slowest"
SELECT REPLACE(REPLACE('The red car is the fastest car in the race.','car','fox'),'fastest','slowest')
--REMOVE THE BLANK SPACE CHARACTER | REPLACE THE VALUE "irregular" with "no"
SELECT REPLACE(REPLACE(' This sentence has irregular spacing . ',' ',''),'irregular','NO')
Fascicolazione e REPLACE in SQL
Le regole di confronto sono un fattore importante da considerare quando si lavora con dati stringa e la funzione REPLACE. Le regole di confronto possono essere impostate a più livelli di un database, ad esempio un account o un livello di istanza, il database, lo schema, la sessione o il livello della tabella. Questa impostazione può influire sul funzionamento della funzione SOSTITUISCI.
In questo esempio, potresti non aspettarti che la A maiuscola venga sostituita con b minuscola. Ma dipende dalle regole di confronto che vengono ereditate dalla connessione corrente al database.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Questo risultato corrisponde a a con A a causa delle regole di confronto.
L'impostazione delle regole di confronto in SQL Server può essere verificata a livello di server:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
La chiave qui è il CI che sta per case insensitive. Per applicare la funzione REPLACE con distinzione tra maiuscole e minuscole, il parametro string_expression può essere raccolto in modo esplicito.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
In questo esempio, poiché il parametro string_expression viene confrontato con la distinzione tra maiuscole e minuscole, la funzione REPLACE non sostituisce il valore originale.
Riepilogo
La funzione REPLACE è un ottimo strumento per la manipolazione di stringhe di base e avanzata su più sistemi di database relazionali. Questo articolo ha esaminato l'applicazione di base della funzione REPLACE, come utilizzarla in una capacità dinamica. Abbiamo anche discusso dell'utilizzo di REPLACE come funzione nidificata e di come le regole di confronto possono influenzare i risultati da essa restituiti.