Fórum funcoes Pos, lenght no Firebird #52804

15/09/2005

0

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

Responder

Post mais votado

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



Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

15/09/2005

Steve_narancic

era exatamente o que eu precisava, valeu!


Responder

Gostei + 0

21/09/2005

Yallebr

Pessoal e como fazer o inverso.

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

Obrigado.

Yalle


Responder

Gostei + 0

22/09/2005

Emerson Nascimento

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


Responder

Gostei + 0

22/09/2005

Bruno Belchior

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


Responder

Gostei + 0

22/09/2005

Gandalf.nho

[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)


Responder

Gostei + 0

22/09/2005

Bruno Belchior

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


Responder

Gostei + 0

23/09/2005

Gandalf.nho

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar