PDA

Ver la Versión Completa : Filtrar campos DateTime


MARYLOSO
01-02-2007, 08:01:10
Hola amigos :confused:

Tengo un problemita, quiero hacer reportes de tablas por ejemplo :
Un Listado de cumpleaños, ese dato lo puedo obtener filtrando el mes en el campo fecha de nacimiento que es un DateTime, cuando halgo la consulta trato de poner por ejemplo los cumpleaños de marzo con "like */03/*" y me dice que no es un valor valido de fecha, tengo muchos reportes que invariablemente tengo que filtrar el mes o el año de un campo TDateTime y no se como filtrarlo.
Bueno espero me hayan entendido mi duda

Gracias de antemano y espero su pronta ayuda :)

marcoszorrilla
01-02-2007, 08:39:59
Lógicamente el operador Like se utiliza para el texto no para fechas. Lo que quieres hacer deberas de utilizar Month o Extract Month from Campo_Fecha, depende del motor y tipo de tablas puede variar algo la instrucción a utilizar.

Un Saludo.

ContraVeneno
01-02-2007, 17:15:03
Select *
from TuTabla
where fecha between '2006-03-01 00:00:00' and '2006-03-31 23:59:59'


Dependerá de la base de datos que manejes.


with tudatset do begin
if active then close;
sql.clear
sql.add('select *');
sql.add('from tutabla');
sql.add('where fecha between '''+formatdatetime('yyyy-mm-dd',dtpFechaIni.DateTime)+''' and '''+formatdatetime('yyyy-mm-dd',dtpFechaIni.DateTime)+'''');
Open;
...
end; //


Puedes usar parámetros, puedes usar QuotedStr, pues cambiar el formato de la fecha dependiendo de tu manejador... en fin, puedes hacer un millón de cosas.

MARYLOSO
01-02-2007, 18:30:41
Lógicamente el operador Like se utiliza para el texto no para fechas. Lo que quieres hacer deberas de utilizar Month o Extract Month from Campo_Fecha, depende del motor y tipo de tablas puede variar algo la instrucción a utilizar.

Un Saludo.

Hola Gracias por responder
Justo esa es mi pregunta si puedo poner una funcion de ese tipo de ExtractMonth dentro de la consulta SQL, mi base es paradox del dbe de delphi, tiene alguna idea de si existe esta funcion como se llama?
Saludos

MARYLOSO
01-02-2007, 18:33:18
Código SQL [-] (http://www.clubdelphi.com/foros/#)
Select *
from TuTabla
where fecha between '2006-03-01 00:00:00' and '2006-03-31 23:59:59'





Dependerá de la base de datos que manejes.


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
with tudatset do begin
if active then close;
sql.clear
sql.add('select *');
sql.add('from tutabla');
sql.add('where fecha between '''+formatdatetime('yyyy-mm-dd',dtpFechaIni.DateTime)+''' and '''+formatdatetime('yyyy-mm-dd',dtpFechaIni.DateTime)+'''');
Open;
...
end; //





Puedes usar parámetros, puedes usar QuotedStr, pues cambiar el formato de la fecha dependiendo de tu manejador... en fin, puedes hacer un millón de cosas.

Hola

Esta solucion que me das de poner un rango de fechas no me funciona teniendo en cuenta que el mes es fijo para cualquier año que tenga en mi base de datos, porque los cumpleaños de marzo son todos los del mes 3 en cualquier año entiendes, tendria que poner pedacitos de rangos año por año ycual seria el primer y ultimo año, entiendes.
Esta variante que me dices de cambiar el formato de fecha resulta interesante deja probar.
Saludos

MARYLOSO
02-02-2007, 20:23:18
Hola amigos

Bueno a pesar de que no encontre justa la solucion entres sus respuestas si me dio una idea de por donde buscarle y aqui esta la solucion

En el sql de un TQuery ponemos la instruccion que quede asi

Select * from Mitabla
where extract(month from DateField) = Mes

y si lo hacemos directamente en el filtro de un TTable

Month(DateField) = Mes

Igual con el Año (Year) y el dia (Day)

Saludos y Gracias