Ir para o conteúdo principal

Função - Retorna parte de um campo de texto definindo inicio e fim

SQL de criação da função: 

create or replace function retorna_parte (xtexto in text, xdesde in text, xate in text, xcont in int4) returns text as $body$
declare
    info text;
begin
	select substr(split_part(xtexto, xdesde, xcont+1), 1, strpos(split_part(xtexto, xdesde, xcont+1), xate)-1)
      into info;
    return info;
end;
$body$
language plpgsql;

Chamada da função: 

select retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<nome>', '</', 1) as nome,
       retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<dtnascimento>', '</', 1) as dtnascimento,
       retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<profissao>', '</', 1) as profissao

Retorno: 

|     NOME      |    DATA    |   PROFISSAO   |
----------------------------------------------
| João da Silva | 30/03/1990 | Consultor DOX |