Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/10/2008, 04:09
Avatar de gnzsoloyo
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, 5 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)