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()
eLENGTHB()
sintaxe, o argumento pode ser qualquer um dos tipos de dadosCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
, ouNCLOB
. - Ao usar o
LENGTHC()
,LENGTH2()
eLENGTH4()
sintaxe, o argumento pode ser qualquer um dos tipos de dadosCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(mas nãoCLOB
ouNCLOB
).
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: