Re: to_char PL/MI fix

From: Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: pgsql-patches <pgsql-patches(at)postgreSQL(dot)org>
Subject: Re: to_char PL/MI fix
Date: 2003-02-25 08:38:54
Message-ID: 20030225083853.GB26629@zf.jcu.cz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

On Mon, Feb 24, 2003 at 08:16:07PM +0100, Peter Eisentraut wrote:
> Karel Zak writes:
>
> > Peter found bug in the to_char() routine for PL/MI options. This
> > patch fix it -- but this patch doesn't contains tests or docs fixes. I
> > will send it later.
>
> I think there is still a problem with PL. It puts the '+' in aligned
> position and '-' anchored to the number. Is that correct? If PL were to

Yes, it's correct. The MI/PL/SG is PostgreSQL extension, the Oracle
knows very limited version of MI only -- it means we can implement it
by our idea.

> behave like the converse of MI and like it is documented, it would put a
> '+' in aligned position and never put a '-' anywhere. Also, due to this
> apparent problem, PL creates extra whitespace in front of the number.

PL shows '+' or ' ' on wanted position and not disable '-' beacuse
the negative number without '-' is other number. I think disable '-'
for PL will produce mazy outputs (there is not problem implement it,
but I don't think it's good idea, if you need something like this you
can use abs() or define format that handle '-').

The anchored '-' is disabled only if output format contains other option which
handle '-' (like S/SG/MI).

The extra space for PL is for anchored '-', if format option contains MI or SG
this space is not used.

select to_char(x, 'PL9999.999') as pl, to_char(x, 'PLMI9999.999') as plmi from num;
pl | plmi
------------+------------
+ 123.000 | + 123.000
-123.000 | - 123.000
-1231.000 | -1231.000
+ 1231.000 | + 1231.000
+ 1.900 | + 1.900
-1.900 | - 1.900
-.900 | - .900
+ .900 | + .900
+ .945 | + .945
-.945 | - .945
-150.945 | - 150.945
+ 150.945 | + 150.945

in the 'pl' column is '-' angored to number because is there no other way
how show it.

test=# select to_char(x, '"Number:"PL9999.999MI') as pl from num;
pl
-------------------
Number:+ 123.000
Number: 123.000-
Number: 1231.000-
Number:+1231.000
Number:+ 1.900
Number: 1.900-
Number: .900-
Number:+ .900
Number:+ .945
Number: .945-
Number: 150.945-
Number:+ 150.945

there is not extra space beacuse MI is used.

Karel

--
Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
http://home.zf.jcu.cz/~zakkr/

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2003-02-25 14:35:58 Re: performance: use pread instead of lseek+read
Previous Message Manfred Spraul 2003-02-25 06:35:13 Re: performance: use pread instead of lseek+read