Ler a segunda parte de um string?

18/02/2010

1

Pessoal estou usando a versão 2.0 do firebird

Então pra eu ler a primeira parte de uma string eu uso assim
CREATE PROCEDURE SP_POSITION (
    VARIAVEL VARCHAR(250),
    LOCALIZAR VARCHAR(250))
RETURNS (
    POSICAO INTEGER)
AS
DECLARE VARIABLE I INTEGER;
begin
  posicao = 1;
  i = 1;
  while (i <= char_length(variavel) )
  do
  begin
    if (substring(variavel from i for char_length(localizar))=localizar) then
    begin
      posicao = i;
      break;
    end
    i = i + 1;
  end
  suspend;
end

E chamo assim
select
substring( er1200.nome_identificacao from 1 for (select posicao
from sp_position(er1200.nome_identificacao,' ') )-1 )as primeiro_nome

from er1200

Agora preciso pegar a segunda posição depois do ' ' (espaço)  exemplo
JOAO LOPES

Buscar apenas LOPES

ANTONIO BATISTA FILHO
buscar apenas BATISTA FILHO

etc...

Isso no FB 2.0, ou pode ser no Firebird 2.1 usando a função POSITION, cfe o exemplo
coalesce(substring(a.descricao_item_prod_serv||'  '||a.numero_lote||' '||f.nomeclatura_mercosul
from 1 for position('  ' in a.descricao_item_prod_serv||'  '||
a.numero_lote||' '||f.nomeclatura_mercosul)-1),'')as produtos

Mais sempre pegando a segunda posição depois do espaço entre elas.

Obrigado.


Responder

Posts

02/03/2010

Agnaldo Prates

já que você pega a primeira parte assim: select substring( er1200.nome_identificacao from 1 for (select posicao from sp_position(er1200.nome_identificacao,' ') )-1 )as primeiro_nome from er1200 Você pode pegar a segunda assim. select substring( er1200.nome_identificacao from (select posicao from sp_position(er1200.nome_identificacao,' ') )+1 for quantos caracteres você precisar )as segundo_nome from er1200 .

 Espero que funcione. Não testei
Responder