¿Por qué no haces algo más simple?
SI lo que estás buscando está entre dos fechas, sin importar la hora en que se produzca, entonces no debes compararlo como DATETIME, sino como DATE.
Algo como:
En cuanto a la objeción que le haces a Leo:
Cita: en mi base de datos estan como (AÑO-MES-DIA) , entonces por eso la funcion DATE() no me funciona
Eso es absolutamente imposible, como puedo mostrártelo haciendo esta muestra:
Código MySQL:
Ver originalmysql
> SELECT DATE('2012-10-01 12:45:22') FECHA1
, DATE('2012-10-31') FECHA2
;+------------+------------+
| FECHA1 | FECHA2 |
+------------+------------+
| 2012-10-01 | 2012-10-31 |
+------------+------------+
Esto es posible porque MySQL trabaja a nivel contextual, y realiza ciertas conversiones implícitas, cosa que otros DBMS no admiten. En este caso, como uso la función DATE() sobre una cadena que tiene el formato correcto, el sistema aplica la conversión a fecha.
Entonces, si tu campo es un DATETIME, como pareces afirmar, la conversión forzosamente tiene que funcionar. Ahora bien, si usaste un VARCHAR,
en tanto los datos estén correctamente escritos también debe funcionar.
En ese último caso el único problema es que no debiste usar un VARCHAR para almacenar una fecha. Eso no se hace, porque puede generar muchos problemas si hay errores de entrada de datos, y baja performance en las consultas masivas.
Posdata: Por favor, usa la etiqueta correcta para los códigos de las consultas. PHP,
no es SQL.