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