Ir para conteúdo
Fórum Script Brasil
  • 0

Substituir o Instr do Oracle para algo que funcione no PostGreSQL


Edson Vilhalba

Pergunta

Olá Pessoal, 

Eu estou buscando alguma solução para substituir o INSTR do Oracle para alguma que funcione no PostGreSQL.

Exemplo temos o texto: "Buscando uma palavra"

Se utilizarmos instr('Buscando uma palavra',' ',1,2)), como podem ver eu coloquei na função para que ela me retorne o tamanho até o segundo espaço, no caso irá retornar um tamanho 13.

No caso no PostGreSQL temos a função Position, porém o problema dela é que ela não tem parâmetros para eu buscar como o INSTR que seria "Até o segundo espaço", o Position se eu colocar para buscar até o espaço ele só vai até o primeiro e não tem um parâmetro para eu colocar "quero até o segundo espaço".

Poderiam me ajudar?

Desde já agradecido!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa noite, a função abaixo faz algo parecido, não faz o tramento que a função no oracle realiza em relação a parametros negativos, mas talvez possa ajuda-lo.


create or replace function public.instr(_texto text, _busca text, _inicio int, _ocorrencia int) returns int as $$
declare ocorrencia int = 0; posicao int = 0; soma int = _inicio; tamanho int = length(_busca);
begin  
  while ocorrencia < _ocorrencia loop
    posicao := strpos(substring(_texto, soma), _busca);
    
    if posicao > 0 then
       soma := soma + posicao + tamanho - 1;
       ocorrencia := ocorrencia + 1;       
    else
      exit;
    end if;
  end loop;
    
  if ocorrencia > 0 then
    return soma - tamanho;
  else
    return 0;  
  end if;
end;
$$ language plpgsql;

 

 

Editado por Ronivaldo Lopes
Link para o comentário
Compartilhar em outros sites

  • 0

segue outra versão

create or replace function public.instr(_texto text, _busca text, _inicio int, _ocorrencia int) returns int as $$
declare len_busca int = length(_busca); resultado int = 0;
begin  
  with recursive busca( posicao,ocorrencia ) as (
    select _inicio, 0
    union all
    select strpos(substring(_texto, posicao), _busca) + posicao + len_busca - 1, ocorrencia+1
      from busca
      where strpos(substring(_texto, posicao), _busca) > 0 and ocorrencia < _ocorrencia )
    select posicao - len_busca into resultado from busca where ocorrencia = _ocorrencia;
    
  return coalesce(resultado, 0);
end;
$$ language plpgsql;

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...