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

LENGTH() Funzione in Oracle

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() e LENGTHB() sintassi, l'argomento può essere uno qualsiasi dei tipi di dati CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB o NCLOB .
  • Quando si utilizza LENGTHC() , LENGTH2() e LENGTH4() sintassi, l'argomento può essere uno qualsiasi dei tipi di dati CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (ma non CLOB o NCLOB ).

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: