BUG #2551: to_char a to_number

Поиск
Список
Период
Сортировка
От Zuleima Lara
Тема BUG #2551: to_char a to_number
Дата
Msg-id 200607251624.k6PGOsY4075623@wwwmaster.postgresql.org
обсуждение исходный текст
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      2551
Logged by:          Zuleima Lara
Email address:      listapostgres@hotmail.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

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

Предыдущее
От: Michael Fuhr
Дата:
Сообщение: Re: BUG #2549: problem with NATURAL JOIN
Следующее
От: "Michael Enke"
Дата:
Сообщение: BUG #2550: pg_dumpall 7.4.13 -> restore 8.1.4 problem