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

SUBSTR() Funzione in Oracle

In Oracle, il SUBSTR() la funzione restituisce una sottostringa da una determinata stringa.

SUBSTR() richiede almeno due argomenti; la stringa e la posizione da cui estrarre la sottostringa. Accetta anche un terzo argomento opzionale che consente di specificare la lunghezza della sottostringa.

SUBSTR() può anche essere pensato come un insieme di funzioni. Ci sono cinque funzioni separate; SUBSTR() , SUBSTRB() , SUBSTRC() , SUBSTR2() e SUBSTR4() . Ogni funzione calcola la lunghezza in modo diverso.

Sintassi

La sintassi è questa:

{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])

Dove char è la stringa, position è la posizione iniziale della sottostringa e substring_length è la lunghezza dei caratteri da estrarre.

Le funzioni calcolano le lunghezze come segue:

Funzione Calcola la lunghezza usando...
SUBSTR() Caratteri definiti dal set di caratteri di input
SUBSTRB() Byte
SUBSTRC() Caratteri completi Unicode
SUBSTR2() Punti di codice UCS2
SUBSTR4() Punti di codice UCS4

Esempio

Ecco un esempio di base:

SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;

Risultato:

fat cat

Rispetto a SUBSTRB()

Questo esempio mostra come i risultati possono differire, a seconda della funzione specifica che stai utilizzando e del set di caratteri coinvolto.

In questo caso, confrontiamo SUBSTR() con SUBSTRB() :

SELECT 
    SUBSTR('Böyük yağlı pişik', 5) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5) AS SUBSTRB
FROM DUAL;

Risultato:

          SUBSTR           SUBSTRB 
________________ _________________ 
k yağlı pişik    ük yağlı pişik   

Possiamo vedere che le due funzioni hanno restituito due risultati diversi. Questo perché alcuni caratteri in questa stringa utilizzano due byte.

Il SUBSTR() la funzione restituisce la lunghezza in ccaratteri come definito dal set di caratteri di input, mentre SUBSTRB() la funzione restituisce la lunghezza in byte .

Se torniamo alla stringa originale, i risultati sono gli stessi tra le due funzioni:

SELECT 
    SUBSTR('Big fat cat', 5) AS SUBSTR,
    SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;

Risultato:

    SUBSTR    SUBSTRB 
__________ __________ 
fat cat    fat cat   

Questo perché questa stringa utilizza solo un byte per carattere, quindi la lunghezza in byte è uguale al numero di caratteri.

Lunghezza sottostringa

Ecco un esempio che specifica la lunghezza della sottostringa da estrarre:

SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;

Risultato:

fat

Ed ecco un confronto tra SUBSTR() e SUBSTRB() quando si specifica la lunghezza su caratteri multibyte:

SELECT 
    SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
FROM DUAL;

Risultato:

      SUBSTR    SUBSTRB 
____________ __________ 
k yağlı p    ük yağl    

Posizione zero

Una stranezza di questa funzione è che, passando una posizione di 0 produce lo stesso risultato del passaggio di 1 :

SELECT 
    SUBSTR('Big fat cat', 0, 3) AS "0",
    SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;

Risultato:

     0      1 
______ ______ 
Big    Big   

Posizione negativa

Specificando un valore negativo per la posizione, la posizione iniziale viene contata all'indietro dalla fine della stringa:

SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;

Risultato:

cat

E qualsiasi lunghezza specificata viene contata da quella posizione in avanti:

SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;

Risultato:

fat

Argomenti nulli

Se uno (o tutti) gli argomenti sono null , il risultato è null :

SET NULL 'null';
SELECT 
    SUBSTR(null, 3, 3) AS r1,
    SUBSTR('Coffee', null, 3) AS r2,
    SUBSTR('Coffee', 3, null) AS r3,
    SUBSTR(null, null, null) AS r4
FROM DUAL;

Risultato:

     R1      R2      R3      R4 
_______ _______ _______ _______ 
null    null    null    null   

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.

Conteggio argomenti errato

Chiamando SUBSTR() senza passare alcun argomento genera un errore:

SELECT SUBSTR()
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT SUBSTR()
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:

E anche il passaggio di troppi argomenti provoca un errore:

SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL
Error at Command Line : 1 Column : 36
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: