Re[2]: [SQL] Howto format a float8 number?

Поиск
Список
Период
Сортировка
От Sferacarta Software
Тема Re[2]: [SQL] Howto format a float8 number?
Дата
Msg-id 8633.981214@bo.nettuno.it
обсуждение исходный текст
Ответ на Re: [SQL] Howto format a float8 number?  (Herouth Maoz <herouth@oumail.openu.ac.il>)
Список pgsql-sql
HM> At 9:59 +0200 on 7/12/98, Jerome Knobl wrote:

>> I want to print a floating number like this :
>>     10.1 -> 10.10
>> or : 10000.1 -> 10'000.10
>> or : 0 -> 0.00
>> etc...

You can write your own function to format data.
I wrote the following function to format int4 using pl/pgSQL:

create function format(int4,text) returns text as
'declare
        fbak text;
        vbak int4;
        out text;
        sign boolean;
        num char(1);
        i int2;
        lf int2;
        bf int2;
        lv int2;
        sval text;
begin
        vbak := $1;
        fbak := $2;

        if lv > lf then
                raise exception ''the value % is greater than %'',$1,$2;
        end if;


        if vbak < 0 then
                sign := ''t'';
              vbak := -(vbak);
        else
                sign := ''f'';
        end if;

        lf := length(fbak);
        bf := lf;
        sval := text(vbak);
        lv := length(sval);

        while (lv>0 or lf>0) loop
                if lv > 0 then
                        if lf=0 then
                                raise exception ''the value % is greater than %'
                        end if;
                        if substr(fbak,lf,1)=''#'' then
                                num := substr(sval,lv,1);
                                out := substr(fbak,1,lf - 1) || num;
                                if bf > lf then
                                        fbak := out ||  substr(fbak,lf+1);
                                else
                                        fbak := out;
                                end if;
                                lf := lf - 1;
                                lv := lv - 1;
                        else
                                lf := lf - 1;
                        end if;
                else
                        if sign then
                                sign := ''false'';
                                fbak := substr(fbak,1,lf - 1) || (''-'' || subst
                        else
                                fbak := substr(fbak,1,lf - 1) || ('' '' || subst
                        end if;
                        lf := lf - 1;
                end if;
        end loop;

        return fbak;
end;
' language 'plpgsql';

EXAMPLES:

select format(13954323,'#(##)##-###');
format
-----------
1(39)54-323
(1 row)

select format(31121998,'## ## ####');
    format
----------
31 12 1998
(1 row)

select format(311298,'##/##/19##');
    format
----------
31/12/1998
(1 row)

select format(1311000,'#,###,###');
format
---------
1,311,000
(1 row)

-Jose'-



В списке pgsql-sql по дате отправления:

Предыдущее
От: Postgres DBA
Дата:
Сообщение: Re: [SQL] Newbie questions
Следующее
От: David Martinez Cuevas
Дата:
Сообщение: Data Dictionary