Translate

Mostrando postagens com marcador funções de manipulação de string. Mostrar todas as postagens
Mostrando postagens com marcador funções de manipulação de string. Mostrar todas as postagens

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: um caractere ou um 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 das 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-mails 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 utilizarmos está função, é importante verificarmos se os dados são validos.

Observação

O uso de SPLIT_PART não é adequado 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.

sábado, 29 de julho de 2017

Postgresql - Função rpad

Neste artigo, vamos mostrar 2 exemplos, da utilização da função RPAD.
 
Utilizamos a função RPAD para completar uma string do lado direito com determinado(s) caractere(s).

Veja o script dos exemplos no GitHub ou faça o download no Google Drive.

SINTAXE

RPAD (string, posicao_de_caracteres, 'caracter_para_preechimento')
  • string: sequëncia de caracteres;  
  • posicao_de_caracteres: indica até que posição a string será preenchida;
  • caracter_para_preechimento: caractere(s) utilizado(s) para o preenchimento, estes caracteres devem estar entre aspas;
1º Exemplo

Completar com o asterisco (*) a direita dos nomes dos produtos até a 10ª posição.  
Neste exemplo, vamos utilizar a coluna "nome_produto" tabela "tb_produto", exibida na imagem abaixo.


tb_produto
Solução

SELECT
nome_produto,
RPAD (nome_produto,10, '*') AS nome_produto_com_asterisco
FROM tb_produto;

Após a execução da sentença, teremos o seguinte resultado:



Observações
  • lápis:        tem 5  caracteres e foi preenchida com 5 caracteres para completar as 10 posições;
  • caderno:  tem 7  caracteres e foi preenchida com 3 caracteres para completar as 10 posições;
  • borracha: tem 8 caracteres e foi preenchida com 2 caracteres para completar as 10 posições;
  • cartolina: tem 9 caracteres e foi preenchida com 1 caractere  para completar as  10 posições;
No lugar do asterisco (*), poderíamos utilizar qualquer outro caractere alfanumérico ou caractere especial.
Por exemplo: uma ou mais letras, dígitos, espaços, hífen entre outros.
  
2º Exemplo

Preencher com asterisco (*) a direita, até a 5ª posição, os códigos dos produtos.
Neste exemplo, vamos utilizar a coluna "codigo_produto" tabela "tb_produto", exibida na imagem abaixo.

tb_produto

Solução


Como a função RPAD completa uma string, antes de utilizarmos a função RPAD, neste exemplo, devemos utilizar a função CAST para converter a coluna codigo_produto que é do tipo integer (número inteiro) para string (CHARACTER VARYING ou VARCHAR como é mais conhecido).

SELECT
RPAD (CAST(codigo_produto AS VARCHAR), 5, '*') AS codigo_produto, 
nome_produto
FROM tb_produto;

Após a execução da sentença, teremos o seguinte resultado:



Observações
  • O número   8426 tem   4 dígitos, e foi preenchido com 1 * para completar 5 dígitos;
  • O número     438 tem   3 dígitos, e foi preenchido com 2 * para completar 5 dígitos;  
  • O número       22 tem   2 dígitos, e foi preenchido com 3 * para completar 5 dígitos;
  • O número 16547 tem   5 dígitos, logo não foi preenchido com *, pois já contém 5 dígitos;

Aprenda também a utiliza a função lpad:

http://jquerydicas.blogspot.com.br/2014/09/postgresql-funcao-lpad.html

Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google +  ou Facebook

domingo, 9 de julho de 2017

Sql Server - função concat e operador de concatenação

Neste artigo, vamos apresentar exemplos da utilização do operador de concatenação e do uso da funçao concat no Sql Server. Tanto o "operador de concatenação" quanto a função "concat" servem para unir uma ou mais strings.

A função concat é mais simples de ser utilizada do que o operador de concatenação, pois ela ignora dados nulos, e concatena diferentes tipos de dados sem necessitar de conversão, porém só pode ser utilizada na versão 2012 ou em versões posteriores.

Caso tenha interesse faça o download dos exemplos ou veja os scripts no GitHub.

Operador de concatenação

O operador de concatenação é representados por "+".

coluna_1 + coluna_2 + coluna_3
Exemplo:

Vamos apresentar os endereços completos das filiais de uma rede de varejo. 
Será utilizado os dados das colunas da tabela "locacao_filiais", exibida a seguir.
Antes de cada endereço vai ser exibida a string "Endereço: ".

Tabela: locacao_filiais


Para exibirmos os campos da tabela "locacao_filiais" concatenados, executamos a sentença abaixo:

SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
complemento + ' ' +
bairro
FROM locacao_filiais;

Após a execução da sentença, teremos os campos concatenados . Conforme podemos visualizar na imagem abaixo:



Observações: 

Concatenamos espaço em branco (' ') entre os campos para os dados não fiquem "grudados" uns nos outros.

Repare que utilizamos a função "CAST" para converter o campo "numero" que é do tipo int (valor inteiro) para varchar (texto). Se concatenarmos valores numéricos e não utilizarmos o CAST ocorrerá o seguinte erro:

Mensagem 245, Nível 16, Estado 1, Linha 52
Falha ao converter o varchar valor 'Endereço: Avenida Domingos de Moraes ' para o tipo de dados int.

Você deve estar pensando o que ocorreu? Por que somente o primeiro registro apareceu concatenado? Cadê os outros?

Se você observar os dois últimos registros, verá que eles não possuem dados na coluna complementoou seja, os dados são nulos nesta coluna. Ao fazer uma concatenação com um dado nulo, o resultado é nulo.

Como vamos resolver isto?

Antes de fazer a concatenação da coluna complemento faremos uma verificação. Se houver dados no campo, faremos a concatenação com os dados deste campo. Caso contrário substituiremos o dado nulo por uma string vazia  ('').  Para isso utilizaremos a função coalesce, conforme exibido na sentença abaixo.

SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
COALESCE(complemento, '') + ' ' +
bairro
FROM locacao_filiais;

Após a execução da sentença, os dados dos três registros serão exibidos. Conforme podemos visualizar na imagem abaixo:



O nome da coluna será exibido como "(Nenhum nome de coluna)". Caso queira alterar este nome, crie um alias (apelido). Após o "AS" coloque o nome da coluna que você precisa. Neste exemplo, eu vou chamá-la de filiais.


SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
COALESCE(complemento, '') + ' ' +
bairro
AS filiais
FROM locacao_filiais;


Após a execução da sentença, o nome da coluna será exibido como "filiais", conforme exibido na imagem abaixo:



Função concat

A função concat surgiu a partir da versão 2012, logo ela funcionará nesta versão ou em versões posteriores. Ela tem função similar ao operador de concatenação "+". Ela possui duas  vantagens: além de unir valores numérico sem utilizar conversão, também ignora dados nulos.

Exemplo:

Este exemplo é bem parecido com o primeiro exemplo. 
Vamos apresentar os endereços completos das filiais de uma rede de varejo, mas agora será utilizada a função concat
Será utilizado os dados das colunas da tabela "locacao_filiais", exibida a seguir.
Antes de cada endereço vai ser exibida a string "Endereço: ".


Tabela: locacao_filiais


Na funcão concat os dados que serão utilizados deverão estar entre virgulas. 

CONCAT(coluna_1, coluna_2, coluna_3, ....)

Utilizamos a função concat na sentença abaixo:

SELECT
CONCAT
(
    'Endereço: ', tipo_logradouro' ', logradouro, ' ', numero, ' ', complemento, ' ', bairro
)
FROM locacao_filiais;

Observação: Concatenamos espaço em branco (' ') entre os campos para os dados não ficarem "grudados" uns nos outros.

Após a execução da sentença será exibido o resultado a seguir:


Perceba que foram exibidos os três registros concatenados e não houve a necessidade de se preocupar em tratar os dados nulos, pois na função concat eles são ignorados.

O nome da coluna será exibido como "(Nenhum nome de coluna)". Caso queira alterar este nome, crie um alias (apelido). Após o "AS" coloque o nome da coluna que você precisa. Neste exemplo, eu vou chamá-la de filiais.

SELECT
CONCAT
(
    'Endereço: ', tipo_logradouro' ', logradouro, ' ', numero, ' ', complemento, ' ', bairro
) AS filiais
FROM locacao_filiais;

Após a execução da sentença, o nome da coluna será exibido como "filiais", conforme exibido na imagem abaixo: 


Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google + ou Facebook.

sexta-feira, 1 de maio de 2015

Postgresql - Formatar CNPJ com REGEXP_REPLACE

Neste artigo, vamos mostrar um exemplo de como utilizar a função REGEXP_REPLACE para formatar o CNPJ.

Caso tenha interesse, veja o script no github ou faça o download 

1º Exemplo

Para formatar o CNPJ vamos utilizar a tabela "tb_cadastro", exibida na imagem a seguir:


 Solução



Observe que na função REGEXP_REPLACE:
  • Utiliza-se parenteses "( )" para separar cada parte da string, neste caso o CNPJ;
  • Utiliza-se "\d" para representar os digitos de "0" até "9";
  • Dentro das chaves "{}" deve ser colocado a quantidade de dígitos que vamos utilizar em cada parte; 
  • Utiliza-se contra-barra "\" antes de cada parte criada;
Após a execução da sentença, teremos o seguinte resultado:


Veja também:


Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google +  ou Facebook.

sábado, 18 de abril de 2015

Postgresql - Formatar CPF com REGEXP_REPLACE

Neste artigo, vamos mostrar 3 exemplos de como utilizar a função REGEXP_REPLACE para formatar o CPF.
Veja qual o exemplo é mais fácil para você, eu considero o 3º exemplo o mais fácil de ser utilizado.

Caso tenha interesse, veja o script no github, faça o download ou execute no Sqlfiddle

1º Exemplo

Para formatar o CPF vamos utilizar a tabela "tb_alunos", exibida na imagem a seguir:

 Solução


Observe que na função REGEXP_REPLACE:
  • Utilizamos parenteses "( )" para separar cada parte da string, neste caso o CPF;
  • Utilizamos colchetes   "[ ]" para indicar quais os caracteres que iremos utilizar em cada parte, neste caso utilizamos caracteres numéricos de "0" até "9", representados pela expressão 0-9;
  • Indicamos dentro das chaves "{}" a quantidade de dígitos que vamos utilizar; 
  • Utilizamos contra-barra "\" antes de cada parte criada;
Após a execução da sentença, teremos o seguinte resultado:


 2º Exemplo

Também podemos substituir a expressão "0-9" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão [:digit:]. O resultado será o mesmo. 

Solução



Após a execução da sentença, teremos o seguinte resultado:


3º Exemplo

Para facilitar, podemos substituir a expressão "[[:digit:]]" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão abreviada "\d". O resultado será o mesmo.

Solução




Após a execução da sentença, teremos o seguinte resultado:


Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google +  ou Facebook.

sábado, 11 de abril de 2015

Postgresql - Formatar CEP com REGEXP_REPLACE

Neste artigo, vamos mostrar 3 exemplos de como utilizar a função REGEXP_REPLACE para formatar CEP. 
Veja qual a forma é mais simples para você, eu considero a do 3º exemplo.

Caso tenha interesse, veja o script no github, faça o download ou execute no Sqlfiddle

1º Exemplo

Para formatar o CEP vamos utilizar a tabela "tb_endereco", exibida na imagem a seguir:


Solução

Observe que na função REGEXP_REPLACE:
  • Utilizamos parenteses "( )" para separar cada parte da string, neste caso o CEP;
  • Utilizamos colchetes   "[ ]" para indicar quais os caracteres que iremos utilizar em cada parte, neste caso utilizamos caracteres numéricos de "0" até "9", representados pela expressão 0-9;
  • Indicamos dentro das chaves "{}" a quantidade de dígitos que vamos utilizar; 
  • Utilizamos contra-barra "\" antes de cada parte criada;
Após a execução da sentença, teremos o seguinte resultado:


 2º Exemplo

Podemos substituir a expressão "0-9" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão "[:digit:]". O resultado será o mesmo. 

Solução


Após a execução da sentença, teremos o seguinte resultado:



3º Exemplo

Para facilitar, podemos substituir a expressão "[[:digit:]]" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão abreviada "\d". O resultado será o mesmo.

Solução



Após a execução da sentença, teremos o seguinte resultado:


Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google +  ou Facebook.