Oracle
 sql >> Database >  >> RDS >> Oracle

REPLACE() Funzione in Oracle

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: