In Oracle, il LENGTH()
funzione restituisce la lunghezza del suo argomento.
LENGTH()
può anche essere pensato come un insieme di funzioni. Ci sono cinque funzioni separate; LENGTH()
, LENGTHB()
, LENGTH()
, LENGTH2()
e LENGTH4()
. Ogni funzione calcola la lunghezza in modo diverso.
Sintassi
La sintassi è questa:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
Le funzioni calcolano le lunghezze come segue:
Funzione | Calcola la lunghezza usando... |
---|---|
LENGTH() | Caratteri definiti dal set di caratteri di input, con il primo carattere della stringa avente posizione 1. |
LENGTHB() | Byte |
LENGTH() | Caratteri completi Unicode |
LENGTH2() | Punti di codice UCS2 |
LENGTH4() | Punti di codice UCS4 |
Il tipo di argomento può essere il seguente:
- Quando si utilizza
LENGTH()
eLENGTHB()
sintassi, l'argomento può essere uno qualsiasi dei tipi di datiCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
oNCLOB
. - Quando si utilizza
LENGTHC()
,LENGTH2()
eLENGTH4()
sintassi, l'argomento può essere uno qualsiasi dei tipi di datiCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(ma nonCLOB
oNCLOB
).
Esempio
Ecco un esempio di base:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Risultato:
11
Rispetto a LENGTHB()
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 LENGTH()
con LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Risultato:
LENGTH LENGTHB _________ __________ 17 22
Possiamo vedere che le due funzioni hanno restituito due risultati diversi. Questo perché alcuni caratteri in questa stringa utilizzano due byte.
Il LENGTH()
La funzione restituisce la lunghezza in caratteri definita dal set di caratteri di input, mentre LENGTHB()
la funzione restituisce la lunghezza in byte .
Se torniamo alla stringa originale, i risultati sono gli stessi tra le due funzioni:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Risultato:
LENGTH LENGTHB _________ __________ 11 11
Questa stringa utilizza solo un byte per carattere, quindi la lunghezza in byte è uguale al numero di caratteri.
Argomento nullo
Se l'argomento è null
, il risultato è null
:
SET NULL 'null';
SELECT
LENGTH(null) AS LENGTH,
LENGTHB(null) AS LENGTHB,
LENGTHC(null) AS LENGTHC,
LENGTH2(null) AS LENGTH2,
LENGTH4(null) AS LENGTH4
FROM DUAL;
Risultato:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null 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
La chiamata della funzione senza passare alcun argomento genera un errore:
SELECT LENGTH()
FROM DUAL;
Risultato:
Error starting at line : 1 in command - SELECT LENGTH() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
E anche il passaggio di troppi argomenti provoca un errore:
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;
Risultato:
Error starting at line : 1 in command - SELECT LENGTH('Big fat cat', 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: