Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta fechas

Estas en el tema de Consulta fechas en el foro de Mysql en Foros del Web. Hola todos Tengo una base de datos y en una tabla tengo un campo tipo CURRENT_TIMESTAMP Con la opcion de llenarse con la fecha actual. ...
  #1 (permalink)  
Antiguo 19/10/2008, 14:37
 
Fecha de Ingreso: marzo-2008
Mensajes: 61
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Consulta fechas

Hola todos

Tengo una base de datos y en una tabla tengo un campo tipo CURRENT_TIMESTAMP
Con la opcion de llenarse con la fecha actual.

Este campo guarda datos como 2008-10-18 16:06:30
Resulta que quiero hacer una consulta de datos de esta tabla que este detro de un rango de fechas
Para eso tengo un fomulario en html que pide al usuario ingresar el rango
Posteriormente con php paso estas fechas a la sentencia sql de esta forma
Código:
SELECT * FROM P WHERE F_INGRESO >= '".$FECHA1."'AND F_INGRESO <= '".$FECHA2."'ORDER BY CODIGO
El problema es que las consultas siempre son 0 probé haciendolo individual es decir
Código:
SELECT * FROM P WHERE F_INGRESO = '".$FECHA1.
y también el resultado es 0, el problema es que el dato CURRENT_TIMESTAMP guarda la hora....como hago para no tener en cuenta la hora??

Gracias
  #2 (permalink)  
Antiguo 19/10/2008, 15:26
 
Fecha de Ingreso: diciembre-2007
Mensajes: 50
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Consulta fechas

Select * from p where date(f_ingreso) >= '".$fecha1."'and date(f_ingreso) <= '".$fecha2."'order by codigo
  #3 (permalink)  
Antiguo 19/10/2008, 17:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta fechas

1. ¿Te has asegurado previamente que el contenido de $FECHA1 y $FECHA2 respeten el formato de MySQL (yyyy-MM-dd HH:mm:ss)?
2. La comparación expresada en F_INGRESO >= '".$FECHA1."'AND F_INGRESO <= '".$FECHA2."' tiene un problema de lógica: Puede que estés pidiendo algo que sea igual a "2008-10-18 16:06:30" e igual al mismo tiempo que "2008-10-21 06:06:30", lo cual es imposible. En otras palabras, la sintaxis adolece de falta de lógica.
3. Para resolver esto existe el X BETWEEN X1 AND X2, siendo X, X1 y X2 del mismo tipo de dato.
4. La sentencia podría quedar escrita mas o menos así:
Código sql:
Ver original
  1. SELECT *
  2. FROM P
  3. WHERE F_INGRESO BETWEEN '".$FECHA1."' AND  '".$FECHA2."'
  4. ORDER BY CODIGO;
La única duda es si el valor de $FECHA1 y $FECHA2 se ajustan al formato de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/10/2008, 19:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 61
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Consulta fechas

Gracias a todos

gnzsoloyo tu respuesta me sirvió mucho tu respuesta, quisiera preguntarte ahora con ese formato como consulto por 1 día solamente, por la hora no puedo hacerlo tan especifico.

Gracias
  #5 (permalink)  
Antiguo 20/10/2008, 04:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta fechas

Consultar por un sólo día tiene dos detalles a considerar:
1. Si el campo en la tabla se definió como DATE, es simplemente usar en el string el formato estándar del date:
Código sql:
Ver original
  1. SELECT *
  2. FROM  P
  3. WHERE  F_INGRESO = 'stringDeFecha'
  4. ORDER BY CODIGO;
Siendo el formato del string "yyyy-MM-dd".
2. Si el campo en la tabla se definió como DATETIME, se debe hacer -especialmente en MySQL 5.0 o superior- una conversión previa sobre el campo de la tabla para obtener el formato correcto:

Código sql:
Ver original
  1. SELECT *
  2. FROM  P
  3. WHERE  DATE(F_INGRESO) = 'stringDeFecha'
  4. ORDER BY CODIGO;
Esto es simplemente porque lo que buscas comparar el la parte de fecha (DATE) de la comparación.

Recalco lo de la versión porque MySQL hace conversiones implícitas entre DATE y DATETIME, pero el problema es que si el campo de la tabla tuviese el valor '2008-10-19 08:22:45', por ejemplo, la comparación se haría entre estos valores: '2008-10-19 08:22:45' = '2008-10-19 00:00:00', los cuales son obviamente diferentes, a pesar de ser iguales las fechas.
Esa especie "bug" del funcionamiento de la conversión se debe a que lo que hace MySQL es llevar el tipo de dato de menor representación al de mayor (DATETIME en este caso), y como ese dato no contiene horas, se las agrega como '00:00:00'.
Si usases MySQL 4.0.22, la cosa es diferente. En esa versión MySQL "recortaba" el valor mayor, dejando un valor menor (DATE). Pero lo cambiaron porque generaba demasiados problemas a los usuarios, y además carecía de lógica el método.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/10/2008, 20:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 61
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Consulta fechas



Muchas gracias funciona perfecto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:23.