-2

Faço estágio de análise de dados, e estou com a seguinte situação, preciso selecionar parte de uma string dentro da coluna, preciso de usuarioDestino: até o final do nome que está na coluna de observacao

inserir a descrição da imagem aqui

preciso extrair apenas esse dado para alimentar uma outra coluna da tabela.

3
  • "até o final do nome", o que você classifica como "final do nome"? Todos os exemplos da imagem o nome é a última coisa na string, isso acontece em 100% dos casos ou há situações que há conteúdo após o nome? Se sim, como você pode identificar se uma palavra faz parte do nome da pessoa ou não? Commented 11/08/2022 às 19:08
  • Combine position e substring .... learnsql.com/cookbook/… Commented 11/08/2022 às 19:29
  • 1
    Nesse caso seria o final do nome do usuário destino, as vezes temos mais de uma ocorrência de ':' nos campos. Commented 11/08/2022 às 19:48

1 Resposta 1

-1

Uma maneira de resolver o problema é utilizando a função substring do sql.

A grande dificuldade está em selecionar onde está o ponto de corte da função substring.

Através dos dados que mostrou, estou supondo que a coluna observacao, possui pelo menos uma ocorrência do caractere :. Desta forma podemos montar uma consulta que resolve o seu problema.

Basicamente o que vai precisar é da função position em conjunto com a função substring.

A função position retorna o índice da primeira ocorrência de uma string em outra string. Caso não encontre então ela retorna 0. Por isso é importante que exista pelo menos uma ocorrência do caractere :. Pois caso contrário a solução trará resultados indevidos.

Em nosso sql verifique que estou utilizando o índice do caractere ":" + 1, estou fazendo isso para omitir o caractere espaço em branco que existe após o caractere ":".

Outra suposição que estou fazendo é a de que não existem outros caracteres após o nome do usuário, ou seja, estou supondo que a string termina no nome do usuário e não existe mais nenhuma string após o nome.

Segue um exemplo de como pode ser implementado:

SELECT id, observacao, substring(observacao, position(':' in observacao)+1) AS recorte FROM <nome-da-tabela>;

Neste exemplo acima estou mostrando o resultado da execução da função substring como sendo a coluna recorte.

E se existem mais de uma ocorrência de ":"

Se a string possui o mesmo padrão, ou seja o nome que deseja está após a ultima ocorrência do ":" você pode utilizar a função auxiliar reverse, assim vai obter o índice da ultima ocorrência do caractere ":" e pode recortar a string desejada, utilizando a mesma lógica acima.

Segue um exemplo:

 id |              observacao            |
 ---+------------------------------------+---
  1 | Usuario: destino: NOME DO USUÁRIO

SQL:

 SELECT id, observacao, substring(observacao, position(':' in reverse(observacao))+1) AS recorte FROM <nome-da-tabela>;
1
  • Valeu mesmo, foi de grande ajuda. Commented 11/08/2022 às 19:49

Você deve fazer log-in para responder a esta pergunta.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.