Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Uso de DATE en consulta (https://www.clubdelphi.com/foros/showthread.php?t=83561)

salvica 01-07-2013 15:16:09

Uso de DATE en consulta
 
Hola a todos.
Este hilo podría ser continuación de este otro, pero como las preguntas son distintas, abro un hilo nuevo.

Tengo una tabla de los lugares existentes en unas coordenadas de GoogleMaps y las fechas en las que se han visitado.
Código:

Tabla LUGARES
    ID = Identificador del registro
    VISITADO = fecha y hora de la visita
    LATITUD, LONGITUD = coordenadas Google del sitio

Bien, necesito listar aquellas que se han visitado un día en un intervalo determinado. por ejemplo entre las 14:30:00 de ayer y las 15:45:00 de hoy (suponemos la fecha de hoy como 22-01-2013

Esto me saca TODAS las visitas de un día en un área determinada (unas 15 más o menos)
Código SQL [-]
SELECT *
   FROM lugares
WHERE DATE(visita)='2013-01-22'
     AND (latitud   BETWEEN (38.953619-0.65) AND (38.953619+0.65) )
     AND (longitud  BETWEEN (-1.858060-0.9)  AND (-1.858060+0.9) )
Sin embargo no soy capaz de reducir el intervalo (esto NO ME FUNCIONA):
Código SQL [-]
SELECT *
   FROM lugares
WHERE ( DATE_FORMAT(visita, '%Y-%m-%d %H:%i:%s')>='2013-01-21 14:30:00' )
     AND ( DATE_FORMAT(visita, '%Y-%m-%d %H:%i:%s')<='2013-01-22 15:45:00' )
     AND (latitud   BETWEEN (38.953619-0.65) AND (38.953619+0.65) )
     AND (longitud  BETWEEN (-1.858060-0.9)  AND (-1.858060+0.9) )
¿Podeis ayudarme?
Gracias adelantadas
Salvica

Casimiro Notevi 01-07-2013 15:49:27

Fecha= :fecha
and hora between :horainicio and horafinal


Aunque habría que saber si la fecha y hora están en un mismo campo o en campos separados.

salvica 01-07-2013 16:11:13

Hola Casimiro Notevi, gracias por contestar.

La fecha y hora están en el mismo campo y declarados como timestamp,el código es SQL puro y duro para una página web y lo construye un script PHP 5.4, el servidor es MySql5 (se me olvidó poner los datos de sistema, lo siento)

He probado a poner el campo visitas tal cual, pero tampoco me devuelve nada:
Código SQL [-]
SELECT *
   FROM lugares
WHERE ( visita>='2013-01-21 14:30:00' )
      AND ( visita<='2013-01-22 15:45:00' )
      AND (latitud   BETWEEN (38.953619-0.65) AND (38.953619+0.65) )
      AND (longitud  BETWEEN (-1.858060-0.9)  AND (-1.858060+0.9) )
Lo de usar variables, en php no lo he utilizado nunca, solo en delphi ¿también se puede?
Gracias
Salvica

DarkDudae 03-07-2013 09:28:16

Cita:

Empezado por salvica (Mensaje 463034)
Hola Casimiro Notevi, gracias por contestar.

La fecha y hora están en el mismo campo y declarados como timestamp,el código es SQL puro y duro para una página web y lo construye un script PHP 5.4, el servidor es MySql5 (se me olvidó poner los datos de sistema, lo siento)

He probado a poner el campo visitas tal cual, pero tampoco me devuelve nada:
Código SQL [-]
SELECT *
   FROM lugares
WHERE ( visita>='2013-01-21 14:30:00' )
      AND ( visita<='2013-01-22 15:45:00' )
      AND (latitud   BETWEEN (38.953619-0.65) AND (38.953619+0.65) )
      AND (longitud  BETWEEN (-1.858060-0.9)  AND (-1.858060+0.9) )
Lo de usar variables, en php no lo he utilizado nunca, solo en delphi ¿también se puede?
Gracias
Salvica

Parece que tu consulta está correcta. En principio el DateFormat no lo necesitas para nada puesto que estás introduciendo la fecha/hora en el formato YYYY-MM-DD HH:MM:SS de MySQL.
El caso es que el comando que estás usando te debería funcionar siendo visita un campo de tipo TIMESTAMP. Prueba quitando las condiciones de latitud y longitud por si son estas las que están excluyendo otros resultados de búsqueda.

Otra cosa que supongo que no tendrá nada que ver, es que yo suelo poner en las consultas SQL los campos de fecha y hora con doble comillado en vez de simple: "2013-01-21 14:30:00"

Un saludo

salvica 06-07-2013 19:03:04

Hola a todos y gracias por vuestra ayuda.
Al final lo he resuelto separando DATA y TIME para cada evento, por si en algún momento pido algún intervalo entre dos fechas.
Código SQL [-]
SELECT *
  FROM lugares
WHERE ( DATE(visita)>='2013-01-21' AND TIME(visita)>='14:30:00' )
     AND ( DATE(visita)<='2013-01-22' AND TIME(visita)<='15:45:00' )
     AND (latitud   BETWEEN (38.953619-0.65) AND (38.953619+0.65) )
     AND (longitud  BETWEEN (-1.858060-0.9)  AND (-1.858060+0.9) )


La franja horaria es GMT +2. Ahora son las 18:09:57.

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