BUG #2551: to_char a to_number

From: "Zuleima Lara" <listapostgres(at)hotmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #2551: to_char a to_number
Date: 2006-07-25 16:24:54
Message-ID: 200607251624.k6PGOsY4075623@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 2551
Logged by: Zuleima Lara
Email address: listapostgres(at)hotmail(dot)com
PostgreSQL version: 8.1.2
Operating system: Windows XP Profesional Version 2002
Description: to_char a to_number
Details:

Greetings!, I do not write very well in english, and for that reason excuse
me. So, i'm going to explain my problem in spanish.

Estoy desarrollando bajo windows, y tengo configurado el lc_numeric en
"Spanish_Venezuela", estoy intentando convertir de un formato de caracteres
a uno numerico.

Me explico, para una funcion que calcula los datos que deben ser presentados
en un reporte he convertido un monto (tipo numeric) en una cadena para que
tenga el siguiente formato "999.999.999,00", ya que asi es como se trabaja
aqui en venezuela.Lo he hecho de la siguiente manera:
to_char(monto,'999G999G999G999G999G999G999G999D99').

Y ahora necesito volver a convertir ese valor en un dato numerico, ya que
deseo sumarlo con otro dato para presentarlo en otro reporte, y para poder
hacerlo necesito que no sea varchar.
Pues bien, debido a mi configuracion, el valor que me convierte no es el
deseado.

Ejemplo

PRUEBA=# show lc_numeric;
lc_numeric
-------------------
Spanish_Venezuela
(1 fila)

PRUEBA=# select to_char(123456,'999G999G999G999D99');
to_char
---------------------
123.456,00
(1 fila)

PRUEBA=# select to_number('123.456,00','999999999999D99');
to_number
-----------
123.45
(1 fila)

PRUEBA=# select to_number('123.456,00','999G999G999G999D99');
to_number
-----------
12345600
(1 fila)

En el primer caso, se convierte como deseo, el formato es el esperado,
mientras que para el segundo cuando ya quiero volver al valor inicial, me da
un valor diferente, me corta el dato, y si coloco el otro formato con los
separadores de miles, entonces me agrega la parte decimal a la entera.

Ahora, si yo dejo la configuracion por defecto entonces si puedo obtener la
conversion del valor convertido en varchar, en numeric, y me retorna el
valor correcto. Lo que pasa es que necesito que la presentacion del dato sea
de puntos para los separadores de miles y comas para los decimales; y esta
configuracion no me lo permite pues hace que sean al reves, comas para los
miles y puntos para los decimales.

PRUEBA=# set lc_numeric = 'C';
SET

PRUEBA=# select to_char(123456,'999G999G999G999D99');
to_char
---------------------
123,456.00
(1 fila)

PRUEBA=# select to_number('123,456.00','999999999999D99');
to_number
-----------
123456.00
(1 fila)

Lo que entiendo de esto es que unicamente se puede trabajar bien para la
configuracion por defecto, pues para otras configuraciones locales, no lo
hace.

Zuleima Lara

Browse pgsql-bugs by date

  From Date Subject
Next Message Boris 2006-07-26 11:15:49 BUG #2552: wrong sql dump?
Previous Message Michael Enke 2006-07-25 16:06:19 BUG #2550: pg_dumpall 7.4.13 -> restore 8.1.4 problem