Translate

quinta-feira, 20 de novembro de 2025

Postgresql - Função split_part

 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)

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:


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.
  • 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:

Retorno da função split_part


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, '@'1AS usuario,
split_part(e_mail, '@'2AS dominio
FROM clientes;

Após a execução da query, temos o resultado exibido na imagem abaixo:

Resultado da coluna com alias para melhor identificação





Antes de usar `SPLIT_PART', verifique 
  • 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 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.

Uso do split_part com dados inválidos



SELECT 
e_mail,
split_part(e_mail, '@'1AS usuario,
split_part(e_mail, '@'2AS dominio
FROM clientes;

Após a execução da query, temos o resultado exibido na imagem abaixo:


split_part com string sem delimitador ou com delimitador mal posicionado


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.