Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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/


pgsql-es-ayuda by date

Next:From: listapostgresDate: 2006-07-19 16:28:14
Subject: Creacion de excepciones propias
Previous:From: Zuleima LaraDate: 2006-07-19 15:29:15
Subject: to_char a to_number

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group