[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