Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda SQL Between con rango de fechas (https://www.clubdelphi.com/foros/showthread.php?t=69053)

darkbits 23-07-2010 01:32:56

Ayuda SQL Between con rango de fechas
 
Un saludo grande al club ,
tengo problemas con esta consulta con rango de fechas

la DB es MySQL
en campo tiene el nombre de "fecha" es varchar ( no se si esto tiene algo que ver) esta lleno con datos dia/mes/año

donde sDateEdit1.text=01/07/2010 y sDateEdit2.text= 22/07/2010 son mis 2 rangos de fechas y cuando ejecuto la consulta no me da ni un resultado

please.. como soluciono este detalle, toy trabajando con delphi 6

Código SQL [-]
DM.MySqlRep.close;
_DM.MySqlRep.SQL.Text:='SELECT fecha, hora, operador, det_producto,serial, garantia, cantidad, cadaUno, venta_bs, venta_US,utilidad FROM detalle_venta, venta WHERE venta.pago="CREDITO" and venta.id_ventas=detalle_venta.id_ventas and venta.fecha BETWEEN :fechaInicio and :fechaFinal and venta.operador="'+DBLookupComboBox1.Text+'"order by fecha ASC';
_dm.MySqlRep.ParamByName('fechainicio').AsDateTime:=strtodate(sDateEdit1.text);
_dm.MySqlRep.ParamByName('fechaFinal').AsDateTime:=strtodate(sDateEdit2.text);
_DM.MySqlRep.open;

Muchisimas gracias por darme una mano!

Caral 23-07-2010 02:33:45

Hola
Lo mejor es que el campo fecha sea Date, si no siempre va a dar algun problema.
Saludos

Nelet 23-07-2010 13:26:31

Pregunto desde mi ignorancia de mySQL...¿las fechas no deben ir entre comillas?.

Jac fcc 23-07-2010 16:33:02

Me parece que el formato que usa MySql es aaaa/mm/dd
entonces las fechas en los editores serian:

sDateEdit1.text='2010/07/01' y sDateEdit2.text='2010/07/22'

la consulta por fechas siempre la coloco al final, sería;

Código Delphi [-]
DM.MySqlRep.close;
_DM.MySqlRep.SQL.Text:='SELECT fecha, hora, operador, det_producto,serial, garantia, cantidad, cadaUno, venta_bs, venta_US,utilidad FROM detalle_venta, venta WHERE venta.pago="CREDITO" and venta.id_ventas=detalle_venta.id_ventas and venta.operador="'+DBLookupComboBox1.Text+'"and venta.fecha BETWEEN :fechaInicio and :fechaFinal order by fecha ASC';
_dm.MySqlRep.ParamByName('fechainicio').AsDateTime:=strtodate(sDateEdit1.text);
_dm.MySqlRep.ParamByName('fechaFinal').AsDateTime:=strtodate(sDateEdit2.text);
_DM.MySqlRep.open;

yo trabajo con SQL asi que desconosco los detalles de sintaxis, pero prefiero particionar el texto de la consulta:
Código Delphi [-]
_DM.MySqlRep.SQL.Text:='SELECT fecha, hora, operador, det_producto,serial, garantia, cantidad, cadaUno, venta_bs, venta_US,utilidad FROM detalle_venta, venta';
_DM.MySqlRep.SQL.Text:='FROM detalle_venta, venta';
_DM.MySqlRep.SQL.Text:='WHERE venta.pago="CREDITO" and venta.id_ventas=detalle_venta.id_ventas and venta.operador="'+DBLookupComboBox1.Text+'"and venta.fecha BETWEEN :fechaInicio and :fechaFinal'; 
_DM.MySqlRep.SQL.Text:='order by fecha ASC';

O algo similar que permita obtener el mismo resultado pero que se vea legible.:rolleyes:

calco_hugo 23-07-2010 18:36:47

he tenido en algun momento un problema parecido, pero creo que la solucion esta por el lado de convertir el tema en el select o el where, CONVERT o TO_DATE, la verdad estoy hasta las manos con unas cosas que el jefe me pidio para el martes pasado (jeje), pero buscaria por ese lado, si no haria el codigo, si no podes avisame y trato de hacerlo
hugo

darkbits 23-07-2010 21:53:00

solucionado gracias a todo amigos..

Jac fcc 23-07-2010 22:13:19

podrias indicar como se solucionó? :confused:

solo curiosidad, gracias.;)

darkbits 23-07-2010 22:38:34

Solucionado el tema de fechas
 
un saludo para todos
aqui les dejo la solucion de Delphi con Mysql con fechas
fecha tiene que ser "date" y mysql lo reconoce como yyyy/mm/dd

el BETWEEN No falla probado con D6

Código SQL [-]
_DM.MySqlRep.SQL.Text:='SELECT fecha, hora,operador, det_producto,serial, garantia, cantidad, cadaUno, venta_bs, venta_US,utilidad 
FROM detalle_venta, venta WHERE  venta.pago="CREDITO" AND venta.id_ventas=detalle_venta.id_ventas and venta.operador="'+DBLookupComboBox1.Text+'" and venta.fecha 
BETWEEN :fechainicio and :fechaFinal order by fecha ASC';

_dm.MySqlRep.ParamByName('fechainicio').AsDatetime:=trunc(sDateEdit1.date);
_dm.MySqlRep.ParamByName('fechaFinal').AsDatetime:=trunc(sDateEdit2.date);
 _DM.MySqlRep.Open;

darkbits 23-07-2010 22:45:47

ayuda BETWEEN con fecha y hora
 
Un salduo
un saludo tengo este Between que funciona con solo fechas muy bien con Mysql mi nuevo problema es cuando fecha es de tipo "datetime"
fecha + hora >> 23/07/2010 19:00:00
no me da el reporte para mi es algo en los parametros ya probe de todo y nada, help me

Código SQL [-]
_DM.MySqlRep.SQL.Text:='SELECT fecha, hora,operador, det_producto,serial, garantia, cantidad, cadaUno, venta_bs, venta_US,utilidad 
FROM detalle_venta, venta WHERE  venta.pago="CREDITO" AND venta.id_ventas=detalle_venta.id_ventas and venta.operador="'+DBLookupComboBox1.Text+'" and venta.fecha 
BETWEEN :fechainicio and :fechaFinal order by fecha ASC';

_dm.MySqlRep.ParamByName('fechainicio').AsDatetime:=trunc(sDateEdit1.date)+strtodatetime(HoraInicio.  text);
_dm.MySqlRep.ParamByName('fechaFinal').AsDatetime:=trunc(sDateEdit2.date)+strtodatetime(HoraFinal.te  xt);
 _DM.MySqlRep.Open;

Jac fcc 23-07-2010 23:55:07

lo que pasa es que la suma de fecha se realiza:
Cita:

trunc(sDateEdit1.date)+strtodatetime(HoraInicio.text);
estarás sumando la fecha de sDateEdit1 mas el dia y hora de la conversionstrtodatetime (..).

en lugar de particionar y concatenar solo agrega la hora a tu campo de fecha:
Código Delphi [-]
:=sDateEdit1.date+StrtoTime('00:00:01');//el primer segundo de tu fecha inicial
:=sDateEdit2.date+StrtoTime('23:59:59');//el ultimo segundo de tu fecha final

intentalo y nos cuentas como te fue.:cool:

¿no hubiera sido mejor continuar con tu anterior hilo?
no era necesario abrir uno nuevo, no crees? :confused:

darkbits 24-07-2010 00:06:54

Funciona muy Bien!
 
Funciono!

con las 2 opciones.

gracias por la solucion.


Nota: inicie un nuevo hilo porque mi anterior consulta fue respondida por todos los amigos. hasta su solucion .

Casimiro Notevi 24-07-2010 02:18:33

Yo diría que es el mismo tema, no?, ¿por qué abrir otro hilo? :confused:, por favor, no hagas estas cosas ;)

darkbits 24-07-2010 17:44:18

Sorry
 
:( sorry amigos no volvera a pasar...

darkbits 24-07-2010 21:34:57

quitenme la duda
todo lo que es fecha de tipo datetime las consultas se solucionan con BETWEEN y parametros? o se puede con like o =

tengo este sql donde ventas.fecha es datetime > 24/07/2010 17:00:00

para el resultado solo quiero tomar encuenta la fecha como hay distintas horas de venta no me da ni un resultado.

Código SQL [-]
_DM.MySql.Close;
_DM.MySql.SQL.Text:='SELECT SUM(venta_Bs) as ventBs ,SUM(Venta_US) AS ventUs 
 FROM detalle_venta, venta WHERE venta.pago="CONTADO" and venta.id_ventas=
 detalle_venta.id_ventas And venta.fecha="'+FormatDateTime('yyyy"-"mm"-"dd',Date)+'"';
_DM.MySql.open;

gracias.

Casimiro Notevi 25-07-2010 03:38:38

Amigo darkbits, creo que te lo han explicado arriba, ¿no es eso lo que necesitas?, si no es eso, entonces, explicanos mejor, gracias :)

darkbits 26-07-2010 18:30:38

hola amigos me explico un poquito mejor

lo que pasa es que tengo dudas con fechas que son campos datetime
el between funciona perfecto lo aprendi aqui.

mi consulta era que si toda variable de tipo "datetime" se solucionan con BETWEEN y parametros? o se puede con like o comparaciones porque tengo otro sql donde solo me interesa la fecha y no la hora en esta consulta donde venta.fecha es de tipo datetime.

Código SQL [-]
_DM.MySql.Close;
_DM.MySql.SQL.Text:='SELECT SUM(venta_Bs) as ventBs ,SUM(Venta_US) AS ventUs 
 FROM detalle_venta, venta WHERE venta.pago="CONTADO" and venta.id_ventas=
 detalle_venta.id_ventas And venta.fecha="'+FormatDateTime('yyyy"-"mm"-"dd',Date)+'"';
_DM.MySql.open;

Casimiro Notevi 26-07-2010 21:20:37

Sigue sin quedarme demasiado claro, pero veamos... si quieres obtener todos los registros con fecha mayor a la que sea, pues:
where fecha > '01.08.2010'
No importa la hora porque cualquier hora será mayor, ten en cuenta lo dicho antes, que la fecha es realmente un número con decimales, ejemplo: 35800,36547898854
35800 es el día y la parte decimal es la hora.


La franja horaria es GMT +2. Ahora son las 04:30:02.

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