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 |