Hola Federico...

On Sun, 3 May 2009 11:40:32 -0200, elcotorro wrote
> hola, los molesto por el siguiente caso
> tengo una tabla con un campo character var de 20
> en la cual tengo 2 registros con los siguientes valores
> "              900730" y
> "                 999"
> ambos tamaño de ambos es de 20 caracteres completados a la derecha
> restando el len del numero

El problema está en el tipo de datos. ¿Para qué poner un campo de caracteres
cuando vas a almacenar números?. Podrías tranquilamente declararlo como un
bigint y el ordenamiento sería correcto:

> si pido el max de exe campo...... me sale "                 999"

Exactamente. Hice la prueba:

seba=# CREATE TEMP TABLE mitablita(micampito varchar(20));
CREATE TABLE
seba=# INSERT INTO mitablita VALUES('             900730'),('               
999');
INSERT 0 2
seba=# SELECT MAX(micampito) FROM mitablita ;
         max
----------------------
                  999
(1 fila)

> y si ordeno por ese campo lo ordena mal al igual que el max

Bueno, eso no es así en mi caso:

seba=# SELECT * FROM mitablita ORDER BY micampito;
      micampito
----------------------
               900730
                  999
(2 filas)

Pero como te decía antes, vos estás esperando que trate a los números como
números, pero en realidad los está tratando como cadenas de caracteres. Lo
podrías hacer es castear indicando que son números:

seba=# SELECT MAX(micampito::numeric) FROM mitablita ;
  max
--------
 900730
(1 fila)

Pero te ahorrarías éste trabajo indicando correctamente el tipo de datos.
Aparte que no estoy seguro si funcionará en Postgres >= 8.3 (yo estoy
probándolo en 8.2 y casualmente en 8.3 se introdujeron cambios con respecto a
éste tipo de casteos).

> muchas gracias por su atencion

Saludos...

-
-------------------------------------------
Sebastián Villalba
A. Gestión Informática
Facultad de Cs. Médicas
U.N.C. - Argentina
-------------------------------------------

--
TIP 8: explain analyze es tu amigo

Responder a