Re: Why length(to_char(1::integer, '9')) = 2 ? - Mailing list pgsql-general

From Dmitriy Igrishin
Subject Re: Why length(to_char(1::integer, '9')) = 2 ?
Date
Msg-id AANLkTi=6tmKreabTW81YYrXcHtBBU=n6+La33uf7-gWq@mail.gmail.com
Whole thread Raw
In response to Re: Why length(to_char(1::integer, '9')) = 2 ?  (Adrian Klaver <adrian.klaver@gmail.com>)
Responses Re: Why length(to_char(1::integer, '9')) = 2 ?  (Bruce Momjian <bruce@momjian.us>)
List pgsql-general


2011/3/9 Adrian Klaver <adrian.klaver@gmail.com>
On 03/09/2011 09:59 AM, Dmitriy Igrishin wrote:


2011/3/9 Adrian Klaver <adrian.klaver@gmail.com
<mailto:adrian.klaver@gmail.com>>


   On Wednesday, March 09, 2011 5:34:41 am Dmitriy Igrishin wrote:

    >
    > But I am missing something or there is a documentation inaccuracy:
    >
   http://www.postgresql.org/docs/9.0/static/functions-formatting.html#FUNCTIO
    > NS-FORMATTING-NUMERICMOD-TABLEsays: fill mode (suppress padding
   blanks and
    > zeroes)
    >
    > Test:
    > dmitigr=> select to_char(12,'FM0009');
    >  to_char
    > ---------
    >  0012
    >
    > dmitigr=> select length(to_char(12,'FM0009'));
    >  length
    > --------
    >       4
    >
    > So, FM suppresses only padding blanks not zeroes...
    >
    > Any comments?
    >

   test(5432)aklaver=>select to_char(12,'9999');
     to_char
   ---------
       12

   test(5432)aklaver=>select to_char(12,'FM9999');
     to_char
   ---------
     12

   It is a little confusing, but you asked for the 0 in your
   specification so they
   are not considered padding.

   Look at the examples in the table listed below to get an idea of
   what I am
   talking about.
   http://www.postgresql.org/docs/9.0/static/functions-formatting.html
   Table 9-25

Yes, I see, thanks!

I just talking about phrase "fill mode (suppress padding blanks and zeroes)"
in the documentation should be rephrased to "fill mode (suppress padding
blanks)".

To get technical it means suppress unspecified padding O's. See below for example.



Or I misunderstood what is "padding zeroes" without explicitly
specification "0" pattern in the format format template...

This combination from the example table shows that:

to_char(-0.1, 'FM9.99') '-.1'
to_char(0.1, '0.9')     ' 0.1'

The 0 in 0.1 is not strictly needed, so if you use FM it will be suppressed.
Ahh, I guess I understand (thanks to you examples).
Lets look at the test:

dmitigr=> SELECT '>'||to_char(-0.1, 'FM9.99')||'<' AS v;
   v  
-------
 >-.1<

dmitigr=> SELECT '>'||to_char(0.1, '0.9')||'<' AS v;
   v   
--------
 > 0.1<

dmitigr=> SELECT '>'||to_char(0.1, 'FM0.9')||'<' AS v;
   v  
-------
 >0.1<

dmitigr=> SELECT '>'||to_char(0.1, '0.99999')||'<' AS v;
     v     
------------
 > 0.10000<

dmitigr=> SELECT '>'||to_char(0.1, 'FM0.99999')||'<' AS v;
   v  
-------
 >0.1<

So, padding zeroes suppressed by FM is a rest of the value.

Thank you very much!
 





   --
   Adrian Klaver
   adrian.klaver@gmail.com <mailto:adrian.klaver@gmail.com>




--
// Dmitriy.




--



--
// Dmitriy.


pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: Why length(to_char(1::integer, '9')) = 2 ?
Next
From: Scott Marlowe
Date:
Subject: Re: about memory size reported by system.