Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Order by con campo TimesStamp en IB (https://www.clubdelphi.com/foros/showthread.php?t=56666)

Garfio 23-05-2008 13:08:25

Order by con campo TimesStamp en IB
 
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

Eso es lo que no consigo
 
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

Se admiten otras opciones
 
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

Código SQL [-]
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
 
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

Solución hallada
 
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. ;)


La franja horaria es GMT +2. Ahora son las 04:19:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi