[firebase-br] R$ valor fomatado moeda real (dois decimais)

marcelo luiz stefaniak - teflamar marcelo em teflamar.com.br
Ter Jul 11 17:34:57 -03 2006


daniel, não sei se é seu aniversário, mas aí vai um presentão para você... 
hehehe
para selecionar, use como na linha abaixo:
SELECT (SELECT R_REAL FROM SP_REAL(MOV.VALOR)) VALOR,MOV.DATA
FROM CADMOV MOV

/*sp para formatar valores numeric, float, e decimal em R$ 123,123,45
aguenta até 13 dígitos.
* * * não otimizei o código da sp, quem tiver tempo pode fazê-lo.
*/
CREATE PROCEDURE SP_REAL (
    L_VALOR FLOAT)
RETURNS (
    R_INTEIRO FLOAT,
    R_DECIMAL FLOAT,
    R_REAL VARCHAR(15))
AS
declare variable wint1 integer;
declare variable wint2 integer;
declare variable wx smallint;
declare variable w3 smallint;
declare variable wy smallint;
declare variable wletra char(1);
declare variable wtexto varchar(20);
declare variable wtexto1 varchar(20);
declare variable wtexto2 varchar(20);
begin
  r_decimal=:L_VALOR - CAST(L_VALOR AS NUMERIC(11,0));
  if (r_decimal < 0 ) then r_decimal=:L_VALOR - CAST(L_VALOR -1 AS INTEGER);
  r_inteiro=L_VALOR - r_decimal;
  r_decimal=r_decimal * 100;
  wint1=cast(r_inteiro as integer);
  wint2=cast(r_decimal as integer);
  wtexto1=CAST(wint1 AS VARCHAR(10))||'.';
  wx=0;
  wy=0;
  wtexto='';
  while (wx<>13) do
  begin
    wletra=substring(wtexto1 from 1 for 1);
    if (wletra<>'.' and wletra<>'') then
    begin
      wtexto=wletra||wtexto;
      wy=wy+1;
    end
    wtexto1=substring(wtexto1 from 2 for 13);
    wx=wx+1;
  end
  /* wy=número de letras */
  wtexto2='';
  wx=0;w3=0;
  while (wx<>:wy) do
  begin
    wx=wx+1;
    wtexto2=substring(wtexto from 1 for 1)||wtexto2;
    wtexto=substring(wtexto from 2 for 13);
    w3=w3+1;
    if (w3=3 and wtexto<>'') then
    begin
      wtexto2='.'||wtexto2;
      w3=0;
    end
  end
  r_inteiro=wint1;
  r_decimal=wint2;
  r_real=substring(wtexto2||','||substring(100 + wint2 from 2 for 2) from 1 
for 15);
  suspend;
end
/* marcelo luiz stefaniak - teflamar proc.dados ltda */

----- Original Message ----- 
From: "CPD (Borborema-Imperial Transportes Ltda)" <cpd em borborema.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, July 11, 2006 12:14 PM
Subject: Re: [firebase-br] UDF em Win e Linux
Vc tem algum exemplo de data e valor convertido por SP ?
ex:
15667.58 ===> 15.667,58
15667.587 ===> 15.667,59
CURRENT_TIMESTAMP ===> 11/07/2006 12:14
CURRENT_DATE ===> 11/07/2006





Mais detalhes sobre a lista de discussão lista