Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   restar fechas sql (https://www.clubdelphi.com/foros/showthread.php?t=36049)

Oraxtar 30-09-2006 02:03:56

restar fechas sql
 
Hola amigos del foro, tengo el siguiente problema y espero me puedan ayudar. Estoy realizando un proyecto en el cual manejo informacion de medicamentos. Lo que pretendo hacer es un reporte que me muestre los medicamentos que van a caducar con un mes de anterioridad manejando una query. Estoy trabajando con Delphi 7 y mis tablas estan hechas en IB 6.
Estuve chencando el foro pero no puede entontrar algo. El codigo que tengo ahora es este :

fecha:=datetostr(date);
frmrepcad.IBQuery1.Close;
frmrepcad.IBQuery1.SQL.Clear;
frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad-:fecha1 between 1 and 30');
frmrepcad.IBQuery1.ParamByName('fecha1').AsDateTime:=strtodatetime(fecha);
frmrepcad.IBQuery1.open;
frmrepcad.QuickRep1.Preview;

Con este codigo me marca un error, espero me puedan ayudar.

ilichhernandez 30-09-2006 03:38:47

Los campos fecha_cad y fecha 1 son tipo date ?? ...... se que es ua pregunta rara pero he visto fechas en formato string tambien..
en que formato las guardas (01122006 o 20061201)

vtdeleon 30-09-2006 09:08:21

Saludos

No entiendo por que un parametro justo despues de un campo:confused:, ahi es que esta el error.

Código SQL [-]
select * from medicamento where fecha_cad between :fechahoy and fechahoy+30
Esta consulta mostrará los medicamentos qeu se van a vences dentro de los proximos 30 dias.
"Fechahoy" como su nombre lo dices es un parametro en la que asignaras la fecha actual o cualquier otra fecha si lo consideras oportuno.

Pd:Trata de usar las etiquetas para resaltar el codigo que utilices. Dale clic a los link que tengo en mi firma y chequea como se utilizan. Despues de eso, edita tu mensaje de mas arriba y haz la prueba;). BIENVENID@ al Club:)

Oraxtar 01-10-2006 02:20:56

Saludos ilichhernandez respecto a la pregunta que me haces, si, el campo que tengo en mi tabla medicamento fecha_cad es de tipo date, y el parametro fecha1 es de tipo datetime (me parece que asi lo cheque en otro tema parecido, lo utilice en otra query para generar otro reporte y me funciono perfectamente). y en lo referente a el formato me parece que es '01/05/06'.

Espero me puedas ayudar, que estoy medio confundido:confused:

Oraxtar 01-10-2006 02:30:32

Que onda vtdeleon, gracias por tu respuesta, pero me marca un error, probe el codigo que me sugeriste, pero me dice que la columna fecha1 es desconocida.

Código Delphi [-]
frmrepcad.IBQuery1.Close;
    frmrepcad.IBQuery1.SQL.Clear;
    frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad between :fecha1 and fecha1+30');
    frmrepcad.IBQuery1.ParamByName('fecha1').AsDateTime:=strtodatetime(fecha);
    frmrepcad.IBQuery1.open;
    frmrepcad.QuickRep1.Preview;

despues probe con :
Código Delphi [-]
frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad between :fecha1 and :fecha1+30');

poniendole (:), y me decia que el campo fecha1+30 no existe.

La verdad, es la primera vez que manejo delphi e IB. Agradeceria la ayuda que me puedan dar.:D
pd. gracias por lo de las etiquetas.

ilichhernandez 01-10-2006 04:46:43

En este link aparecen algo que te puede servir.
http://groups.msn.com/ce77cj5fut58ai...6&all_topics=1

aledieb 01-10-2006 16:03:24

El error da porque falta : en el 2° fecha1

Código Delphi [-]
frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad between :fecha1 and fecha1+30');

Deberia ser:

Código Delphi [-]
frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad between :fecha1 and :fecha1+30');

vtdeleon 01-10-2006 17:48:40

Saludos

Ess extraño que el error haga referencia a una columna cuando en si es un parametro :confused:

Lo que puedo sugerir es que elimines ese query y agregues otro. Entonces prueba la consulta.

Oraxtar 01-10-2006 20:01:17

Saludos.

parece ser que ya esta :D.
No se porque me mandaba ese error que te comente vtdeleon, pero se arreglo separando el operador '+' de el paramero fecha1, asi como les muestro :

Código Delphi [-]
    frmrepcad.IBQuery1.SQL.Add('select * from medicamento where fecha_cad between :fecha1 and :fecha1 + 30');

y poniendo los : como comento alejandro (aledieb).

Por el momento es todo. Gracias a todos por su ayuda :D.

Jonathan96 16-01-2008 14:52:00

Restar fecha
 
Tengo un problema ocupo restar la fecha ya existente en la BD con la fecha actual como hacerlo en SQL:confused:

Lepe 16-01-2008 15:47:30

Cita:

Empezado por Jonathan96 (Mensaje 258453)
Tengo un problema ocupo restar la fecha ya existente en la BD con la fecha actual como hacerlo en SQL:confused:

Tu pregunta no es exactamente el tema tratado en el hilo, deberías haber abierto otro hilo (tómalo como sugerencia para la próxima vez).

¿qué base de datos usas?, porque cada motor tiene sus peculiaridades, en este caso es "cómo obtener la fecha actual".

En MySql se usa GetDate()
en Firebird puede usarse Current_date

Así en FB quedaría:
Código SQL [-]
 select  current_date as Fecha_Actual, fecha, (current_date - fecha) as Diferencia
from tabla

Saludos

Jonathan96 16-01-2008 16:59:58

La base de datos que uso es SQL server 2005, y tu respuesta me da un poco de problemas, Delphi me dice que la columna Fecha actual no existe este es el codigo:
GetDate() as Fecha_Actual, (Fecha_Actual - dbo.Empleados.FechaIngreso) as Diferencia.
:confused:

jachguate 16-01-2008 17:35:19

Porque no existe, claro está. :D

La consulta sería algo así:
Código SQL [-]
select GetDate() as FechaActual, (GetDate() - dbo.Empleados.FechaIngreso) DiasEmpleado
  from Empleado
 where activo = 1;

Hasta luego.

;)

Jonathan96 16-01-2008 18:13:34

Consulta Sql
 
Gracias ya habia descubierto mi error, De todos modos gracias!:D

Jonathan96 16-01-2008 20:38:21

Restar fecha
 
Mi problema continua yo lo que ocupo saber es la diferencia en meses y años que hay de una fecha a la actual!!! yo utilizo un DateDiff el cual solo me debuelve o meses o años.
Y yo ocupo que me los debuelva juntos por ejemplo que si una fecha es 01/01/2007 y la actual es 02/01/2008 me debelva 1/1 osea un año y un mes.

:confused:

Y la verdad que no tengo idea como hacerlo.
XFa ayudenme.

jachguate 16-01-2008 21:33:56

Te recuerdo que la diferencia en años es la doceava parte de la diferencia en meses. También te recuerdo que las sentencias SQL de prácticamente todos los motores soportan operaciones aritméticas.

Hasta luego.

;)

Jonathan96 21-01-2008 22:01:44

Gracias
 
He descubierto que con el mod y div lo podia hacer!! Por si alguien ocupa la cosulta:D


La franja horaria es GMT +2. Ahora son las 12:05:58.

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