Jump to content
Fórum Script Brasil

Question

Bom Dia

Gostaria de saber se tem como na função baixar converter o valor ate 999 bilhões, pois atualmente ele so converte ate 999 milhões

CREATE OR REPLACE FUNCTION valor_extenso_f_teste(numeric)
RETURNS text AS
$BODY$
DECLARE
moeda_sing text;
moeda_plu text;
milhao text;
milhar text;
unidade text;
centavo text;
compl_milhao text;
compl_milhar text;
compl_unidade text;
resultado text;
valor text;
BEGIN
IF $1 = 0 THEN
return '';
END IF;
--moeda corrente no singular e plural.
moeda_sing := ' REAL';
moeda_plu := ' REAIS';
--formata o valor de acordo com a máscara 999999999.99
valor := replace(substr(to_char($1, '999999999D00'), 2), ' ', '0');
--usa a função valor_extenso_aux_f para obter quantos milhões.
milhao := valor_extenso_aux_f(substr(valor,1,3));
IF (substr(valor,1,3)::integer > 1) THEN
milhao := milhao || ' MILHOES';
ELSE
IF (substr(valor,1,3)::integer = 1) THEN
milhao := milhao || ' MILHAO';
END IF;
END IF;
--usa a função valor_extenso_aux_f para obter quantos mil.
milhar := valor_extenso_aux_f(substr(valor,4,3));
IF (substr(valor,4,3)::int > 0) THEN
IF substr(valor,4,3)::int = 1 THEN
milhar := ' MIL';
ELSE
milhar := milhar || ' MIL';
END IF;
END IF;
--usa a função valor_extenso_aux_f para obter quantas unidades.
unidade := valor_extenso_aux_f(substr(valor,7,3));
IF (substr(valor,1,9)::integer = 1) THEN
unidade := unidade || moeda_sing;
ELSE
unidade := unidade || moeda_plu;
END IF;
--usa a função valor_extenso_aux_f para obter quantos centavos
centavo := valor_extenso_aux_f('0' || substr(valor,11,2));
IF (substr(valor,11,2)::integer > 1) THEN
centavo := centavo || ' CENTAVOS';
ELSE
IF (substr(valor,11,2)::integer = 1) THEN
centavo := centavo || ' CENTAVO';
END IF;
END IF;
--verifica a necessidade de ',' após o milhão.
IF length(trim(milhao))::integer <> 0 THEN
compl_milhao := ' E ';
ELSE
compl_milhao := '';
END IF;
--verifica a necessidade de , após o mil.
IF length(ltrim(substr(valor,6,4),'0'))::int < 4 or length(trim(substr(valor,6,4),'0'))::int = 1 THEN
compl_milhar := ' ';
ELSE
compl_milhar := ' E ';
END IF;
--verifica a necessidade de , após as unidades.
IF length(trim(unidade))::integer <> 0 and length(trim(centavo))::integer <> 0 THEN
compl_unidade := ' E ';
ELSE
compl_unidade := '';
END IF;
resultado:= milhao || compl_milhao || milhar || compl_milhar ||
unidade || compl_unidade || centavo;
return replace(resultado,' ',' ');
END;
$BODY$
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148886
    • Total Posts
      644905
×
×
  • Create New...