In Oracle, il REPLACE()
La funzione consente di sostituire una parte di una stringa con un'altra stringa.
La funzione accetta tre argomenti:la stringa, la sottostringa da sostituire e la stringa di sostituzione (con cui sostituire la sottostringa).
Puoi omettere la stringa di sostituzione, nel qual caso la funzione rimuoverà tutte le istanze della sottostringa.
Sintassi
La sintassi è questa:
REPLACE(char, search_string
[, replacement_string ]
)
Dove char
è la stringa, search_string
è la sottostringa da sostituire e replacement_string
è la stringa con cui sostituire quella sottostringa.
Esempio
Ecco un esempio di base:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Risultato:
Barrier Reef
In questo caso abbiamo sostituito la sottostringa Island
con Reef
.
Partite multiple
Se la stringa da sostituire si verifica più volte all'interno della stringa, tutte le occorrenze vengono sostituite:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Risultato:
Black cats and white cats
Nessuna corrispondenza
Se la sottostringa non è presente nella stringa, REPLACE()
restituisce la stringa invariata:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Risultato:
Barrier Island
Rimuovi una sottostringa
L'omissione del terzo argomento rimuove la sottostringa dalla stringa:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Risultato:
Black and white
Se guardi da vicino, noterai che gli spazi rimangono ancora, poiché non abbiamo specificato alcuno spazio nella sottostringa.
Eccolo di nuovo con lo spazio incluso:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Risultato:
Black and white
Maiuscole/minuscole
Il REPLACE()
la funzione esegue una corrispondenza con distinzione tra maiuscole e minuscole:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Risultato:
Barrier Island
In questo esempio, il caso non corrispondeva, quindi la stringa originale è stata restituita invariata.
Stringhe vuote
Ecco cosa succede quando viene passata una stringa vuota per ogni dato argomento:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Risultato:
1 2 3 ____ ____________ _________ Black dog Black
Quindi in questo caso:
- Il passaggio di una stringa vuota per la stringa iniziale restituisce una stringa vuota.
- Il passaggio di una stringa vuota per il secondo argomento restituisce la stringa originale.
- Il passaggio di una stringa vuota per il terzo argomento rimuove la stringa da sostituire dalla stringa.
Carattere spaziale
Una stringa vuota non è la stessa del carattere spazio.
Ecco cosa succede quando cambiamo la stringa vuota in uno spazio:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Risultato:
1 2 3 ____ ______________ __________ Blackcatdog Black
Pertanto, se la stringa non è altro che uno spazio, possiamo sostituirlo con un'altra stringa:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Risultato:
cat
Argomenti nulli
Passaggio null
per ogni argomento funziona come passare una stringa vuota:
SET NULL 'null';
SELECT
REPLACE(null, 'dog', 'cat') AS "1",
REPLACE('Black dog', null, 'cat') AS "2",
REPLACE('Black dog', 'dog', null) AS "3"
FROM DUAL;
Risultato:
1 2 3 _______ ____________ _________ null Black dog Black
Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null
si verifica come risultato di un SQL SELECT
dichiarazione.
Tuttavia, puoi utilizzare SET NULL
per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null
deve essere restituito.
Argomenti mancanti
Chiamando REPLACE()
senza passare alcun argomento genera un errore:
SELECT REPLACE()
FROM DUAL;
Risultato:
Error starting at line : 1 in command - SELECT REPLACE() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Troppi argomenti
E il passaggio di troppi argomenti restituisce un errore:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Risultato:
Error starting at line : 1 in command - SELECT REPLACE('Cat', 'a', 'b', 'c') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: