Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con BETWEEN (https://www.clubdelphi.com/foros/showthread.php?t=55559)

MaMu 20-04-2008 21:24:33

Problema con BETWEEN
 
Para realizar una consulta por rango de fechas, hago lo siguiente:

Código Delphi [-]
 
var desde,hasta:string;
begin
  desde:=QuotedStr(FormatDateTime('yyyy-mm-dd',DateTimePicker2.Date));
  hasta:=QuotedStr(FormatDateTime('yyyy-mm-dd',DateTimePicker3.Date));
  QIngreso.Close;
  QIngreso.SQL.Clear;
  QIngreso.SQL.Text:='select * from caja where movimiento="INGRESO" and fecha between '+desde+' and '+hasta;
  QIngreso.Open;

Pero la consulta NO me devuelve los registros cuya fecha=hasta, es decir, para que me devuelva esos registros, debo sumarle 1 dia. Porque?

marcoszorrilla 20-04-2008 21:33:08

Si adaptas este ejemplo que yo utilizo no tendrás problemas.
Código Delphi [-]
Procedure Facturas_Del_Mes();
begin
DmComisi.QrComis.Close;
DmComisi.QrComis.Sql.Clear;
DmComisi.QrComis.Sql.Add('Select NFactura, Fecha, Codclient, Vendedor, ');
DmComisi.QrComis.Sql.Add('Base, Repartos ');
DmComisi.QrComis.Sql.Add(' from Facturas');
DmComisi.QrComis.Sql.Add('Where Vendedor = '+QuotedStr(DmAni.VendCodigo.Value));
DmComisi.QrComis.Sql.Add('And Fecha Between :Ini And :Fin');
DmComisi.QrComis.ParamByName('Ini').AsDate:= fIni;
DmComisi.QrComis.ParamByName('Fin').AsDate:= fFin;
DmComisi.QrComis.Open;
end;

fIni y fFin, son variables de tipo TdateTime.

Un Saludo.

MaMu 20-04-2008 22:01:03

Gracias marcoszorrilla, ya lo habia solucionado usando parámetros, pero mi duda es en realidad, porque tiene ese comportamiento.

Saludos

marcoszorrilla 20-04-2008 22:04:48

En SQL el formato de fecha tiene que ser "mm/dd/yyyy".

Un Saludo.

MaMu 20-04-2008 22:09:09

Cita:

Empezado por marcoszorrilla (Mensaje 281308)
En SQL el formato de fecha tiene que ser "mm/dd/yyyy".

Un Saludo.

Asi es, y en mi caso, usando mySQL, tengo las fechas en este formato:
'yyyy-mm-dd', lo cual ya lo tenia contemplado. Lo que pasa es que el resultado del between, me queda:

min > betweeb < max

Cuando deberia ser

min >= betweeb <= max

Saludos


La franja horaria es GMT +2. Ahora son las 12:09:53.

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