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

Função SUBSTR() no Oracle


No Oracle, o SUBSTR() A função retorna uma substring de uma determinada string.

SUBSTR() requer pelo menos dois argumentos; a string e a posição da qual extrair a substring. Ele também aceita um terceiro argumento opcional que permite especificar quanto tempo a substring deve ter.

SUBSTR() também pode ser pensado como um grupo de funções. Existem cinco funções separadas; SUBSTR() , SUBSTRB() , SUBSTRC() , SUBSTR2() e SUBSTR4() . Cada função calcula o comprimento de uma maneira diferente.

Sintaxe


A sintaxe fica assim:
{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])

Onde char é a string, position é a posição inicial da substring e substring_length é o comprimento dos caracteres a serem extraídos.

As funções calculam os comprimentos da seguinte forma:
Função Calcula o comprimento usando…
SUBSTR() Caracteres definidos pelo conjunto de caracteres de entrada
SUBSTRB() Bytes
SUBSTRC() Caracteres completos Unicode
SUBSTR2() Pontos de código UCS2
SUBSTR4() Pontos de código UCS4

Exemplo


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

Resultado:
fat cat

Comparado com SUBSTRB()


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 SUBSTR() com SUBSTRB() :
SELECT 
    SUBSTR('Böyük yağlı pişik', 5) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5) AS SUBSTRB
FROM DUAL;

Resultado:
          SUBSTR           SUBSTRB 
________________ _________________ 
k yağlı pişik    ük yağlı pişik   

Podemos ver que as duas funções retornaram dois resultados diferentes. Isso ocorre porque alguns caracteres nessa string usam dois bytes.

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

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

Resultado:
    SUBSTR    SUBSTRB 
__________ __________ 
fat cat    fat cat   

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

Comprimento da Substring


Aqui está um exemplo que especifica o comprimento da substring a ser extraída:
SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;

Resultado:
fat

E aqui está uma comparação entre SUBSTR() e SUBSTRB() ao especificar o comprimento em caracteres de vários bytes:
SELECT 
    SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
FROM DUAL;

Resultado:
      SUBSTR    SUBSTRB 
____________ __________ 
k yağlı p    ük yağl    

Posição zero


Uma peculiaridade desta função é que, passando uma posição de 0 produz o mesmo resultado que passar 1 :
SELECT 
    SUBSTR('Big fat cat', 0, 3) AS "0",
    SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;

Resultado:
     0      1 
______ ______ 
Big    Big   

Posição negativa


Especificar um valor negativo para a posição faz com que a posição inicial seja contada para trás a partir do final da string:
SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;

Resultado:
cat

E qualquer comprimento especificado é contado a partir dessa posição:
SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;

Resultado:
fat

Argumentos nulos


Se algum (ou todos) dos argumentos for null , o resultado é null :
SET NULL 'null';
SELECT 
    SUBSTR(null, 3, 3) AS r1,
    SUBSTR('Coffee', null, 3) AS r2,
    SUBSTR('Coffee', 3, null) AS r3,
    SUBSTR(null, null, null) AS r4
FROM DUAL;

Resultado:
     R1      R2      R3      R4 
_______ _______ _______ _______ 
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


Chamando SUBSTR() sem passar nenhum argumento resulta em um erro:
SELECT SUBSTR()
FROM DUAL;

Resultado:
Error starting at line : 1 in command -
SELECT SUBSTR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

E passar muitos argumentos também resulta em um erro:
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;

Resultado:
Error starting at line : 1 in command -
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL
Error at Command Line : 1 Column : 36
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: