funcoes Pos, lenght no Firebird

Firebird

15/09/2005

Tenho um campo onde estão gravados alguns numeros separados por ´;´
Ex.: 1;5;10;20;

se eu executar um select neste campo o valor retornado será 1; 5; 10; 20
mas o que preciso na verdade é que seja retornado:
1
5
10
20

Pensei em criar uma stored procedure do tipo:
 Select Campo from Tabela into :sCampo;

 while pos(´;´, sCampo) > 0 do
 begin
  Campo_Saida = substring(scampo, 1, pos(´;´, sCampo));
  sCampo = substring(scampo, pos(´;´, sCampo), lenght(scampo));
  suspend;
 end;



Alguem teria alguma idéia de como fazer?

[color=green:a13c332297]Movido de Delphi para Interbase/Firebird[/color:a13c332297]


Steve_narancic

Steve_narancic

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

15/09/2005

adapte à sua necessidade:

CREATE PROCEDURE RESULTADO 
RETURNS (
    TEXTORET VARCHAR(10))
AS
DECLARE VARIABLE LETRA CHAR(1);
DECLARE VARIABLE TEXTO VARCHAR(10);
begin
  /* Procedure Text */
  select first 1 campo from teste into :texto;
  textoret = ´´;
  while (texto <> ´´) do
  begin
    letra = substring(texto from 1 for 1);
    if (Letra<>´;´) then
    begin
       textoret = textoret || Letra;
       texto = substring(texto from 2 for 50);
    end
    else
    begin
      suspend;
      texto = substring(texto from 2 for 50);
      textoret = ´´;
    end
  end
end



GOSTEI 1

Mais Respostas

Steve_narancic

Steve_narancic

15/09/2005

era exatamente o que eu precisava, valeu!


GOSTEI 0
Yallebr

Yallebr

15/09/2005

Pessoal e como fazer o inverso.

Concatenar várias linhas em uma única linha? Apenas no SQL, sem Stored Procedure.

Obrigado.

Yalle


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/09/2005

se não usar stored procedure você terá de fazer vários subselects ou joins.


GOSTEI 0
Bruno Belchior

Bruno Belchior

15/09/2005

e a função [b:5ab08c9888]Pos[/b:5ab08c9888] e [b:5ab08c9888]Length[/b:5ab08c9888], existem nativas :?:


GOSTEI 0
Gandalf.nho

Gandalf.nho

15/09/2005

[quote:a475ed8313=´Bruno Belchior´]e a função [b:a475ed8313]Pos[/b:a475ed8313] e [b:a475ed8313]Length[/b:a475ed8313], existem nativas :?:[/quote:a475ed8313]

Não, vc terá que usar UDF. (A que acompanha o IB/FB tem essas funções)


GOSTEI 0
Bruno Belchior

Bruno Belchior

15/09/2005

qual o nome dela??? ela já vem instalada?


GOSTEI 0
Gandalf.nho

Gandalf.nho

15/09/2005

É ib_udf.dll e já vem com o banco.


GOSTEI 0
POSTAR