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:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Solução 1:
SELECT email, SUBSTR(email, 1, 7) AS substring FROM emails;
O resultado é:
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 é:
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 é:
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 é:
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.