A função split_part divide uma string em duas ou mais partes (pedaços) e retorna um determinado pedaço de acordo com a posição escohida.
SINTAXE
split_part(string, 'delimitador', posição)
Aqui explico o conceito de usuário e domínio de um e-mail, caso você já conheça, pule esta explicação e veja a execução do comando sql logo abaixo.
SELECT
Antes de usar `SPLIT_PART', verifique
split_part(string, 'delimitador', posição)
Onde:
- delimitador: o caractere ou o conjunto de caracteres que indica onde a string será quebrada em pedaços. Este delimitador deve ser usado entre aspas simples;
- posição: qual o pedaço da string será retornado pela função. Preencha com 1 para o 1º pedaço, 2 para o 2º pedaço, 3 para o 3º pedaço, e assim por diante
Veja os dois exemplos abaixo, caso tenha interesse veja os scripts no GitHub ou faça o download no Google Drive.
1º Exemplo
Em uma coluna chamada "e_mail" de uma tabela "clientes", temos os dados de e-mails dos clientes. Vamos separar o usuário do e-mail do domínio do e-mail, vejamos alguns casos na prática:- no e-mail maria@gmail.com: o usuário (é o que vem antes do "@" neste caso maria), já o domínio (é o que vem depois do "@" neste caso "gmail.com");
- no e-mail joao123@outlook.com: o usuário (é o que vem antes do "@" neste caso joao123) já o domínio (é o que vem depois do "@" neste caso "outlook.com");
- no e-mail carolina.alves@empresax.com.br: o usuário (é o que vem antes do "@" neste caso carolina.alves) já o domínio (é o que vem depois do "@" neste caso "empresax.com.br");
Neste caso, o "@" será utilizado para fazer a quebra do e-mail em usuário e domínio, logo o "@" será o delimitador.
Veja abaixo a query (comando sql) para fazer a quebra da string:
SELECT
e_mail,
split_part(e_mail, '@', 1),
split_part(e_mail, '@', 2)
FROM clientes;
Após a execução da query, temos o resultado exibido na imagem abaixo:
Após a execução da query, temos o resultado exibido na imagem abaixo:
Perceba que após a execução do comando acima, a coluna chamada "split_part" armazena o usuário do e-mail e a coluna chamada "split_part_2" armazena o domínio do e-mail. Podemos dar alias (apelidos) para os nomes da colunas para facilitar o entendimento utilizando o comando "AS"
SELECT
e_mail,
split_part(e_mail, '@', 1) AS usuario,
split_part(e_mail, '@', 2) AS dominio
FROM clientes;
Após a execução da query, temos o resultado exibido na imagem abaixo:
- se o delimitador existe na string: para evitar resultados inesperados. Neste exemplo foi o "@".
- se o delimitador está bem posicionado: no caso deste exemplo, em específico, verificar se o "@" não está no início ou no fim do e-mail
Se o delimitador NÃO for encontrado ou estiver mal posicionado, algum pedaço de string será vazia.
No exemplo anterior, consideramos que todos os e-mails, tem o "@" que é o delimitador e que ele está bem posicionado.
No exemplo anterior, consideramos que todos os e-mails, tem o "@" que é o delimitador e que ele está bem posicionado.
No segundo exemplo, vamos simular o uso do "split_part" com e-mails sem "@" ou mal posicionado .
2º Exemplo
Vamos executar a mesma query do e-mail anterior mas com e-mail inválidos.
SELECT
e_mail,
split_part(e_mail, '@', 1) AS usuario,
split_part(e_mail, '@', 2) AS dominio
FROM clientes;
Após a execução da query, temos o resultado exibido na imagem abaixo:
Percebemos que houve retorno de string vazia tanto na coluna usuário quanto na coluna domínio.
Logo, antes de utilizar está função, é importante verificarmos se os dados são validos.
Observações
O uso de SPLIT_PART não é adequado para para colunas com grandes volumes de texto devido a possíveis problemas com desempenho.
Sua opinião é muito importante, criticas ou sugestões serão bem-vindas.