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

Como extrair uma substring de uma string no Oracle/SQLite

Problema:


Você tem uma coluna de strings e gostaria de obter substrings delas.

Exemplo 1:


Nos emails tabela, há uma coluna de e-mail. Você gostaria de exibir os primeiros sete caracteres de cada e-mail.

A tabela fica assim:
e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Solução 1:

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

O resultado é:
e-mail substring
[email protected] jake99@
[email protected] tamarab
[email protected] notícia@
[email protected] Jéssica

Discussão:


Use um SUBSTR() função. O primeiro argumento é a string ou o nome da coluna. O segundo argumento é o índice do caractere no qual a substring deve começar. O terceiro argumento é o comprimento da substring.

Atenção! Ao contrário de outras linguagens de programação, os índices começam em 1 , não 0. Isso significa que o primeiro caractere tem índice 1, o segundo caractere tem índice 2, etc.
>SUBSTR(email, 1, 7) retornará as substrings dos valores na coluna de email que começam no primeiro caractere e vão para sete caracteres.

Exemplo 2:


Você gostaria de exibir a substring entre os índices 2 e 6 (inclusive).

Solução 2:

SELECT
  email,
  SUBSTR(email, 2, 5) AS substring
FROM emails;

O resultado é:
e-mail substring
[email protected] ake99
[email protected] amar
[email protected] otina
[email protected] essencial

Discussão:


Você usa o SUBSTR() funcionar exatamente como no exemplo anterior. Desta vez, o segundo argumento da função é 2, pois queremos começar no índice 2. O comprimento da substring é 5 (end_index - start_index + 1 ).

Exemplo 3:


Você gostaria de exibir a substring que começa no sinal @ e termina no final da string, mas não sabe os índices ou comprimentos exatos.

Solução 3:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring
FROM emails;

O resultado é:
e-mail substring
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Discussão:


Você usa o SUBSTR() funciona exatamente como nos exemplos anteriores. Desta vez, você está procurando por um personagem específico cuja posição pode variar de linha para linha. Para encontrar o índice do caractere específico, você pode usar o INSTR(column, character) função, onde coluna é a string literal ou a coluna da qual você gostaria de recuperar a substring e caractere é o character no qual você gostaria de iniciar a substring (aqui, @ ).

O terceiro argumento do SUBSTR() função é o comprimento da substring. Você pode calculá-lo usando o INSTR() e o LENGTH() funções. Você faz isso subtraindo o índice do comprimento da coluna e adicionando 1:
LENGTH(email) - INSTR(email, '@') + 1

Você também pode querer recuperar uma substring que não termina no final da string, mas em algum caractere específico, por exemplo, antes de '.' Veja como você pode fazer isso:
SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring
FROM emails;

O resultado desta consulta é:
e-mail substring
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

A parte INSTR(email, '.') - INSTR(email, '@') simplesmente calcula o comprimento da substring.