sql >> Base de Datos >  >> RDS >> Oracle

Función LENGTH() en Oracle

En Oracle, LENGTH() función devuelve la longitud de su argumento.

LENGTH() también se puede considerar como un grupo de funciones. Hay cinco funciones separadas; LENGTH() , LENGTHB() , LENGTH() , LENGTH2() y LENGTH4() . Cada función calcula la longitud de forma diferente.

Sintaxis

La sintaxis es así:

{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)

Las funciones calculan las longitudes de la siguiente manera:

Función Calcula la longitud usando…
LENGTH() Caracteres definidos por el conjunto de caracteres de entrada, con el primer carácter de la cadena en la posición 1.
LENGTHB() Bytes
LENGTH() Caracteres completos Unicode
LENGTH2() Puntos de código UCS2
LENGTH4() Puntos de código UCS4

El tipo de argumento puede ser el siguiente:

  • Al usar LENGTH() y LENGTH() sintaxis, el argumento puede ser cualquiera de los tipos de datos CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB o NCLOB .
  • Al usar LENGTHC() , LENGTH2() y LENGTH4() sintaxis, el argumento puede ser cualquiera de los tipos de datos CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (pero no CLOB o NCLOB ).

Ejemplo

He aquí un ejemplo básico:

SELECT LENGTH('Big fat cat')
FROM DUAL;

Resultado:

11

Comparado con LENGTHB()

Este ejemplo muestra cómo los resultados pueden diferir, según la función específica que esté utilizando y el juego de caracteres involucrado.

En este caso, comparamos 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;

Resultado:

   LENGTH    LENGTHB 
_________ __________ 
       17         22

Podemos ver que las dos funciones arrojaron dos resultados diferentes. Esto se debe a que algunos caracteres de esta cadena utilizan dos bytes.

El LENGTH() devuelve la longitud en caracteres definida por el conjunto de caracteres de entrada, mientras que LENGTHB() la función devuelve la longitud en bytes .

Si volvemos a la cadena original, los resultados son los mismos entre las dos funciones:

SELECT 
    LENGTH('Big fat cat') AS LENGTH,
    LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;

Resultado:

   LENGTH    LENGTHB 
_________ __________ 
       11         11 

Esta cadena usa solo un byte por carácter, por lo que la longitud en bytes es la misma que la cantidad de caracteres.

Argumento nulo

Si el argumento es null , el resultado es 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;

Resultado:

   LENGTH    LENGTHB    LENGTHC    LENGTH2    LENGTH4 
_________ __________ __________ __________ __________ 
     null       null       null       null       null 

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Recuento de argumentos incorrecto

Llamar a la función sin pasar ningún argumento da como resultado un error:

SELECT LENGTH()
FROM DUAL;

Resultado:

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:

Y pasar demasiados argumentos también da como resultado un error:

SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;

Resultado:

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: