Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função LENGTH() no Oracle


No Oracle, o LENGTH() função retorna o comprimento de seu argumento.

LENGTH() também pode ser pensado como um grupo de funções. Existem cinco funções separadas; LENGTH() , LENGTHB() , LENGTHC() , LENGTH2() e LENGTH4() . Cada função calcula o comprimento de uma maneira diferente.

Sintaxe


A sintaxe fica assim:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)

As funções calculam os comprimentos da seguinte forma:
Função Calcula o comprimento usando…
LENGTH() Caracteres definidos pelo conjunto de caracteres de entrada, com o primeiro caractere da string na posição 1.
LENGTHB() Bytes
LENGTHC() Caracteres completos Unicode
LENGTH2() Pontos de código UCS2
LENGTH4() Pontos de código UCS4

O tipo de argumento pode ser o seguinte:
  • Ao usar o LENGTH() e LENGTHB() sintaxe, o argumento pode ser qualquer um dos tipos de dados CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB , ou NCLOB .
  • Ao usar o LENGTHC() , LENGTH2() e LENGTH4() sintaxe, o argumento pode ser qualquer um dos tipos de dados CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (mas não CLOB ou NCLOB ).

Exemplo


Segue um exemplo básico:
SELECT LENGTH('Big fat cat')
FROM DUAL;

Resultado:
11

Comparado com LENGTHB()


Este exemplo mostra como os resultados podem diferir, dependendo de qual função específica você está usando e do conjunto de caracteres envolvido.

Neste caso, comparamos LENGTH() com 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 as duas funções retornaram dois resultados diferentes. Isso ocorre porque alguns caracteres nessa string usam dois bytes.

O LENGTH() A função retorna o comprimento em caracteres conforme definido pelo conjunto de caracteres de entrada, enquanto a função LENGTHB() função retorna o comprimento em bytes .

Se retornarmos à string original, os resultados são os mesmos entre as duas funções:
SELECT 
    LENGTH('Big fat cat') AS LENGTH,
    LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;

Resultado:
   LENGTH    LENGTHB 
_________ __________ 
       11         11 

Essa string usa apenas um byte por caractere e, portanto, o comprimento em bytes é igual ao número de caracteres.

Argumento nulo


Se o argumento for null , o resultado é 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 

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que null ocorre como resultado de um SQL SELECT demonstração.

No entanto, você pode usar SET NULL para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null deve ser devolvido.

Contagem incorreta de argumentos


Chamar a função sem passar nenhum argumento resulta em um erro:
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:

E passar muitos argumentos também resulta em um erro:
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: