Ler a segunda parte de um string?
18/02/2010
0
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.
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.
Adriano Dolce
Curtir tópico
+ 0
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
Espero que funcione. Não testei
Responder
Clique aqui para fazer login e interagir na Comunidade :)