Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Fechas en interbase (https://www.clubdelphi.com/foros/showthread.php?t=78684)

karocs 09-05-2012 15:02:33

Fechas en interbase
 
Buenos dias.

Como estan ? tengo el siguiente inconveniente, tengo un campo declarado como date en una tabla de interbase pero cuando hago una consulta por este campo me omite ciertos registros, es como si tuviera en cuenta la hora tambien, le coloco un striptime pero hace los procesos muy lentos.

Hay alguna otra forma de asegurar que solo consulte por la fecha para quitarle el striptime. Muchas gracias de antemano.

Casimiro Notevi 09-05-2012 15:52:17

Bueno, a falta de ver tu código, en principio es así, si el dialecto usado es el 1, entonces los campos date tienen fecha y hora.
Si usaras el dialecto 3, entonces tienes los tipos date, time y timestamp (fecha, hora y fechahora)
En dialecto 1 sólo está el date que juntan fecha y hora, y que corresponde al timestamp del dialecto 3.
Cuando hagas consulta entre fechas, en tu caso, tendrás que añadir horas, desde las '00:00' hasta las '23:59'

karocs 11-05-2012 14:47:44

Holaa.

mil gracias por aclaracion :)

birmain 12-05-2012 10:48:18

Consultas de fecha en campos timestamp
 
Existe la posibilidad de consultar solo la fecha en un campo timestamp. Si FVERIFICACION asumimos que es timestamp, todas estas sentencias son válidas:

Código SQL [-]

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) = '01.10.2010')

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) between '01.10.2010' and '01.10.2011')

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) between :LIFECHA and :LSFECHA)

-- a LIFECHA  y LSFECHA se le pueden pasar parámetros del tipo Date

Casimiro Notevi 12-05-2012 11:59:42

Por supuesto, si no necesitamos la hora entonces podemos olvidarnos de esa parte y no habrá ningún problema, ya que si hacemos una consulta entre fechas, nos da igual la hora.

cointec 12-05-2012 16:11:22

Cita:


Código SQL [-]

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) = '01.10.2010')

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) between '01.10.2010' and '01.10.2011')

select a.*
from albaranes_cab a
where (cast(a.fverificacion as date) between :LIFECHA and :LSFECHA)

-- a LIFECHA  y LSFECHA se le pueden pasar parámetros del tipo Date

El problema de estas consultas es que no utilizaran indices y con grandes volúmenes de datos serán lentas, ya que el acceso será secuencial.

Saludos

guillotmarc 12-05-2012 19:59:31

Cita:

Empezado por cointec (Mensaje 432479)
El problema de estas consultas es que no utilizaran indices y con grandes volúmenes de datos serán lentas, ya que el acceso será secuencial.

Saludos

En realidad estas consultas también pueden ser perfectamente optimizadas por índices.

Solo tienes que crear un índice sobre una expresión, en concreto sobre la expresión : cast(a.fverificacion as date)

Saludos

cointec 15-05-2012 15:51:14

Interbase soporta expresiones en indices? A partir de que versión?

guillotmarc 16-05-2012 12:50:06

Cita:

Empezado por cointec (Mensaje 432614)
Interbase soporta expresiones en indices? A partir de que versión?

Firebird lo soporta, desde hace muchos años (a partir de Firebird 2.0).

Interbase no sé si lo soporta.

Saludos.


La franja horaria es GMT +2. Ahora son las 15:29:13.

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