Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   between y datetime !!!!!!!! (https://www.clubdelphi.com/foros/showthread.php?t=45358)

david_uh 29-06-2007 23:21:11

between y datetime !!!!!!!!
 
Buen día caballeros:

Estoy viendo la sentencia Between trabajando con campos DateTime
tengo un conjunto de datos:...
Cita:

1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-30 14:31:16'
2| '2007-06-30 15:08:58'
2| '2007-06-30 15:08:58'
2| '2007-06-30 15:08:58'
pretendo seleccionar entre las fechas '2007-06-29' y '2007-06-30'
escribo esta consulta:
Código SQL [-]
Select tblpagos.id As IdPago, tblpedidos.Total, tblpedidos.NroGuia,
  tblpedidos.IdVendedor, tblpedidos.Id As IdPedido, tblpagos.SaldoCom,
  tblpedidos.IdSisPago, tblpedidos.FechaEnt, tblpagos.FechaPago, tblpagos.Monto,
  tblpedidos.saldo
From tblpedidos Inner Join
  tblpagos On tblpedidos.Id = tblpagos.IdPedido
Where tblpedidos.IdVendedor = 2 And tblpagos.FechaPago Between
  '2007-06-29' And '2007-06-30'
bien esto me arroja lo siguiente:
Cita:

1 | 2007-06-29 15:08:58
2 | 2007-06-29 14:31:16
3 | 2007-06-29 14:31:16
4 | 2007-06-29 14:31:16
pero no incluye los del 2007-06-30 :eek: lo que hice fué aumentar el limite superior en un día. osea:
Código SQL [-]
Select tblpagos.id As IdPago, tblpedidos.Total, tblpedidos.NroGuia,
  tblpedidos.IdVendedor, tblpedidos.Id As IdPedido, tblpagos.SaldoCom,
  tblpedidos.IdSisPago, tblpedidos.FechaEnt, tblpagos.FechaPago, tblpagos.Monto,
  tblpedidos.saldo
From tblpedidos Inner Join
  tblpagos On tblpedidos.Id = tblpagos.IdPedido
Where tblpedidos.IdVendedor = 2 And tblpagos.FechaPago Between
  '2007-06-29' And '2007-06-31'

entonces ahora si arroja esto:
Cita:

1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-29 14:31:16'
1| '2007-06-30 14:31:16'
2| '2007-06-30 15:08:58'
2| '2007-06-30 15:08:58'
2| '2007-06-30 15:08:58'
es decir el límite superior debe ser mayor de un día para incluir el día de rango superior ????

ahora he probado también asi:

Código SQL [-]
Select tblpagos.id As IdPago, tblpedidos.Total, tblpedidos.NroGuia,
  tblpedidos.IdVendedor, tblpedidos.Id As IdPedido, tblpagos.SaldoCom,
  tblpedidos.IdSisPago, tblpedidos.FechaEnt, tblpagos.FechaPago, tblpagos.Monto,
  tblpedidos.saldo
From tblpedidos Inner Join
  tblpagos On tblpedidos.Id = tblpagos.IdPedido
Where tblpedidos.IdVendedor = 2 And tblpagos.FechaPago Between
  '2007-06-29 14:31:16' And '2007-06-30 15:08:58'

y me arroja todo bien, los 8 registros. osea si es datetime tengo que especificar los limites con hora:mm:ss ???? al parecer si.
Y si no deseo trabajar con hh:mm:ss debo aumentar ellimite superior en un Día??????

gracias por sus aportes

gluglu 29-06-2007 23:49:41

Si quieres trabajar con márgenes de fechas, y los registros que tienes en tu base de datos, además de la fecha contienen también una hora, pues tendrás que tener en cuenta no sólo la fecha sino además la hora en tu consulta.

Para ello si compones tu consulta sólo con fecha, deberás además para el margen inferior añadir la hora '00:00:00', y para el margen superior '23:59:59'.

Saludos, ;)

OscarBravo 30-06-2007 01:04:57

Posible solucion between y datetime
 
Se me ocurre que puedes convertir el campo a caracter y despues obtienes los 10 primeros caracteres del campo DateTime, los cuales corresponde a la fecha Y CON ESE DATO PUEDES GENERAR LA CONSULTA, presindiendo de la hora asi:


(Copy(DateToStr(CampoDeLaTabla.Value),1,10))

Ojalá te pueda servir

AzidRain 30-06-2007 02:30:44

o mejor aun utiliza algunas de las funciones del motor para filtrar solo por fecha sin tomar en cuenta los minutos...

Código SQL [-]
Select tblpagos.id As IdPago, tblpedidos.Total, tblpedidos.NroGuia,
  tblpedidos.IdVendedor, tblpedidos.Id As IdPedido, tblpagos.SaldoCom,
  tblpedidos.IdSisPago, tblpedidos.FechaEnt, tblpagos.FechaPago, tblpagos.Monto,
  tblpedidos.saldo
From tblpedidos Inner Join
  tblpagos On tblpedidos.Id = tblpagos.IdPedido
Where tblpedidos.IdVendedor = 2 And date(tblpagos.FechaPago) Between
  '2007-06-29' And '2007-06-30'
No se que motor uses pero todos tienen una funcion que arroja solo la fecha de un datetime.

david_uh 30-06-2007 17:55:57

si bien estoy usando mysql 5, la funcion Date esta disponible y asi trabaja bien gracias por el dato..

AzidRain 30-06-2007 18:00:04

mmm... me siento frustrado...hace unos meses me pasó lo mismo y opté por no utilizar datetime sino solo date y guardar la hora en otro lado...nunca se me ocurrió esta solución. Ahora me lo preguntas tu y mira, se me ocurrió a la primera...;)

david_uh 30-06-2007 18:02:26

Si, suele pasar hasta en las mejores familias ..:)


La franja horaria es GMT +2. Ahora son las 22:18:20.

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