to_char a to_number

From: "Zuleima Lara" <zlara(at)interactivedata(dot)com(dot)ve>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Cc: <zuleimalara(at)hotmail(dot)com>
Subject: to_char a to_number
Date: 2006-07-19 15:29:15
Message-ID: 000d01c6ab48$1c4b74e0$2cee90c1@sky
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola lista,

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.

Como puedo hacer para que el valor sea convertido en numerico sin perder datos y sin agregarle?, es decir, que me salga como debe ser (el original).

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)

Le agradeceria a quien me pueda ayudar.

Zuleima Lara

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message listapostgres 2006-07-19 16:26:41 to_char a to_number
Previous Message Alvaro Herrera 2006-07-19 15:06:50 Re: INSERT INTO multiples