to_char a to_number

From: <listapostgres(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: to_char a to_number
Date: 2006-07-19 16:26:41
Message-ID: BAY12-F322CFD1D92924E1E56AEAB7600@phx.gbl
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

_________________________________________________________________
Charla con tus amigos en línea mediante MSN Messenger:
http://messenger.latam.msn.com/

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message listapostgres 2006-07-19 16:28:14 Creacion de excepciones propias
Previous Message Zuleima Lara 2006-07-19 15:29:15 to_char a to_number