PDA

Ver la Versión Completa : Order by con campo TimesStamp en IB


Garfio
23-05-2008, 13:08:25
Hola a todos, les comento mi problema. Tengo un programa en DELPHI con la siguiente instrución en SQl embebido:
SELECT * FROM MOVCONTE WHERE TIPMOV = 'SALIDA' ORDER BY FECENT, CDCNT
siendo FECENT un campo de una tabla Interbase 6 de tipo TimeStamp.
La idea es ordenar por fecha y dentro de cada fecha por el campo CDCNT, pero al ser un campo TimeStamp me ordena por Fecha y Hora y luego por el campo CDCNT.
Teniendo en cuenta que es una aplicación que lleva muchos años hecha, ¿hay alguna manera fácil de que me ordene por el campo FECENT sin considerar la hora del mismo?.
Gracias anticipadas y un saludo.

gluglu
23-05-2008, 14:20:30
Me temo que no ! :o

Si es un campo TIMESTAMP, pues te ordenará por ese campo timestamp como tal, es decir teniendo en cuenta la fecha y la hora.

Tendrás que cambiar tu instrucción SQL, y extraer la fecha de ese campo Timestamp y ordenar por ese campo correspodiente a la extracción de la fecha. ;)

Garfio
23-05-2008, 16:00:55
Pues eso que no se como hacer para que despues del ORDER BY me acepte un EXTRACT o un CAST. Siempre me da un error de 'Token unknown at line 1, char 32 cast'

Garfio
23-05-2008, 16:34:49
Que no es que quiera añadir al ORDER BY un EXTRACT o un CAST, es que no se como hacerlo. Por eso, si alguien me puede decir como hacer un ORDER BY de la parte fecha de un campo TIMESTAMP, le estaría sumamente agradecido.

gluglu
23-05-2008, 17:20:58
Select MV.*, Cast(MV.FECENT as DATE) as SOLO_FECHA
From MOVCONTE MV
Where MV.TIPMOV = 'SALIDA'
Order by SOLO_FECHA, CDCNT

;)

Garfio
23-05-2008, 17:53:39
No me reconoce el campo del ORDER BY. He probado con una sentencia sencilla:
select mc.*, cast(mc.fecent as char(10)) as fent from movconte mc order by fent

Le he puesto char(10) porque si le pongo date me da un error diciendo que ahora los campos date son campos timestamp y claro no me solucionaba nada. Y me da el error 'Column unknown fent'. Que conste que tambien lo he probado con timestamp en vez de con char(10) y me da el mismo error.

gluglu
23-05-2008, 18:06:35
No tengo Interbase 6.

Lo he probado en Interbase 7 y ahí si me funciona perfectamente. :(

Garfio
26-05-2008, 16:25:15
En algún sitio he leído que en interbase 6 no se pueden usar alias en el ORDER BY pero si el nº de columna: Por lo tanto he cambiado la sentencia por select mc.*, cast(mc.fecent as char(10)) as fent from movconte mc order by 2
y me ha funcionado.
Gracias por la ayuda prestada y espero que esta solución le sirva a alguien más.

gluglu
26-05-2008, 17:13:40
Es cierto !

En alguna ocasión también tuve que usar números de columnas. Ahora recuerdo que era en un order de un 'union'. Ahí también hay que utilizar los números de los índices de las columnas.

Bueno, me alegro que al menos mi ayuda te haya servido. ;)