



Ao tentar criar uma trigger de LOG no Firebird 2.5, percebi que quando usava valores de campos numeric ou double precision, na string desse log, o valor ficava com as casas decimais representativas, como por exemplo, ao usar num campo de Quantidade:
0,5 ficava 0.500
1000 ficava 1000.00
1 ficava 1000
então para resolver criei essa função.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE OR ALTER PROCEDURE FLOAT_TO_STR ( IFLOAT DOUBLE PRECISION) RETURNS ( RETORNO VARCHAR(30)) AS DECLARE VARIABLE VRET VARCHAR(30); DECLARE VARIABLE VDEC CHAR(1) = ','; BEGIN VRET = TRIM(LEADING FROM CAST(:IFLOAT AS VARCHAR(30))); VRET = REPLACE(:VRET, '.', :VDEC); WHILE (RIGHT(:VRET, 1) = '0') DO VRET = LEFT(:VRET, CHAR_LENGTH(:VRET) -1); IF (RIGHT(:VRET, 1) = :VDEC) THEN VRET = LEFT(:VRET, CHAR_LENGTH(:VRET) -1); RETORNO = :VRET; SUSPEND; END |
Para usar chame assim:
select retorno from FLOAT_TO_STR(1000.00) from rdb$databse;
O retorno será uma string no formato ‘1000’
select retorno from FLOAT_TO_STR((select quantidade from estoque where codigo = 10)) from rdb$databse;
O retorno será uma string no formato ‘1’ e não mais ‘1.000’