Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   comparar 1 fecha contra la actual (https://www.clubdelphi.com/foros/showthread.php?t=23786)

amadis 28-07-2005 15:54:39

comparar 1 fecha contra la actual
 
Deseo comparar la fecha almacenada en un campo DATE sin considerar el año en la BD tengo dd/mm/aaa y deseo compararlo contra la fecha de NOW y verificar si el dd/mm de la base es igual al dd/mm del NOW con que parametros tomo unicamente dd/mm tanto de la base como de la fecha actual??

Desde ya gracias

delphi.com.ar 28-07-2005 15:55:59

¿Cuál es el motor que estas utilizando?

ContraVeneno 28-07-2005 16:00:53

la función formatedatetime podría funcionar....

maeyanes 28-07-2005 16:01:04

Y también desde donde quieres hacer la comparación? Desde código en Delphi o directamente desde un query?

amadis 28-07-2005 16:29:44

respuesta
 
trabajo con una tabla paradox! no hay ningun motor raro solo BDE

Y tengo un query al que le paso el string donde quiero comparar lo del a BD que entra en el query como mun parametro contra el now que lo guardo en otro parametro.

Gracias

hector.roma 28-07-2005 17:52:51

En T-SQL
 
Si mal no recuerdo esto te puede dar alguna idea...

Código SQL [-]
SELECT ... tus campos ...
Código SQL [-]
FROM tu_tabla
WHERE DATEPART(day, tu_fecha) = DATEPART(day, GETDATE())
AND DATEPART(month, tu_fecha) = DATEPART(month, GETDATE())


...quiero pensar que estas funciones tambien las habrá en Paradox, suerte.

De esta forma no tienes que llegar hasta el Delphi, y lo puedes hacer directamente.

marcoszorrilla 28-07-2005 17:59:00

Pues con Paradox si es el caso tienes que utilizar:
Código Delphi [-]
 EXTRACT(Year FROM MiFecha);
 EXTRACT(Month FROM MiFecha);
 EXTRACT(Day FROM MiFecha);

Un Saludo.

hector.roma 28-07-2005 18:02:16

Supongo que ahora sólo quedara cambiar los DATEPART por los EXTRACT, con los que marcoszorrilla, nos ha ilustrado (por lo menos a mi).

marcoszorrilla 28-07-2005 18:05:46

Pues creo que con la idea que te da Hector y el cambio "Paradoxiano", que propongo yo lo resuelvas.

Pero estoy intrigado, porque quieres comparar la fecha de esta manera y porque Now y no Date, en cualquier caso Paradox no admite ninguno de las dos expresiones, así que tendras que guardar antes de utilizar en el SQL el resultado de Date o Now en una variable y luego utilizar ésta en tu SQL.

Un Saludo.

ContraVeneno 28-07-2005 18:09:49

o hacerlo con la función formatdatetime desde delphi antes de guardarlo en paradox....

amadis 28-07-2005 18:50:13

Gracias probare como me sugieren
 
NO se cuales son las diferencias de date y now a simplevist me parecieron iguales y use now porque si nomás.

Y si lo tengo almacenado en una variable que luego pasa a ser un param dentro del query.

Lo que necesito es y estoy haciendo es un programa que controle vencimietos cada vez que inicia controla todo lo que vence HOY sin importar el año de inicio del servicio ni que año es hoy. Simplemente me interesa saber que personas tienen vencimiento HOY (DIA/MES).

Desde ya Gracias mañana les cuento como me fue!

marcoszorrilla 28-07-2005 19:18:34

Para terminar con la última pregunta que haces, Date.- Devuelve la fecha del sistema y Now devuelve la fecha y la hora del sistema.

Un Saludo.

amadis 28-07-2005 21:32:30

Error
 
Gracias por la aclaracion de Now y Date!

Respecto de todo lo anterior me da TYME MISMATCH ERROR IN EXPRESSION como si se trataran de tipos de datos distintos...

aqui les dejo el codigo SQL para que lo miren

En la base de datos CLIENTES tengo campos con todos los datos de una persona, CODCLI, NOMBRE, FECHA (que es la fecha de suscripcion y vence cada año) y eso es lo que quiero controlar.


Código SQL [-]
sql_vence.Active := False;

sql_vence.SQL.Clear;
sql_vence.Params.CreateParam(ftDate, 'hoy', ptInput);

sql_vence.ParamByName('hoy').AsDate := DATE;
sql_vence.SQL.Append('Select codcli from clientes');
sql_vence.SQL.Append('WHERE (EXTRACT(Month FROM fecha)) =  (EXTRACT(Month FROM :hoy))');
sql_vence.SQL.Append(' AND  (EXTRACT(Day FROM fecha)) =  (EXTRACT(Day FROM :hoy))');

sql_vence.Active := true;

marcoszorrilla 28-07-2005 21:54:14

Código Delphi [-]
var
 MiFecha:TDate;
 begin
 MiFecha:=Date;
 
 sql_vence.Active := False;
 
 sql_vence.SQL.Clear;
 sql_vence.Params.CreateParam(ftDate, 'hoy', ptInput);
 
 sql_vence.ParamByName('hoy').AsDate := MiFecha;
 sql_vence.SQL.Append('Select codcli from clientes');
 sql_vence.SQL.Append('WHERE (EXTRACT(Month FROM fecha)) =  (EXTRACT(Month FROM :hoy))');
 sql_vence.SQL.Append(' AND  (EXTRACT(Day FROM fecha)) =  (EXTRACT(Day FROM :hoy))');
 
 sql_vence.Active := true;
 
 end;
Prueba con este cambio ya que Paradox no reconoce la sentencia Date en su SQL.

Un Saludo.

Patricio 16-12-2006 16:05:58

como puedo hacer lo mismo pero en Interbase6
 
Hola quisiera preguntarles si alguno sabe como hacer la consulta comparando el dia/mes de un campo TimesTamp de Interbase6 con el dia/mes actual.

Muchas Gracias

Patricio 16-12-2006 16:18:44

tambien es con extract
 
listo gente como no estaba en la ayuda lo del extract no lo probe, pero buscando en otros foros es con esa funcion. Por ejemplo para tomar el dia...
select extract(day from fnacimiento)
Saludos

amadis 02-02-2007 03:35:34

¿comparar la fecha por semanas?
 
Existe alguna forma de hacer un Extract WEEK para comparar la fecha y por ejemplo obtener lso vencimientos de esta semana?


La franja horaria es GMT +2. Ahora son las 07:32:51.

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