Me pregunto por qué la siguiente consulta no arroja ningún resultado si el tiempo también está incluido en la consulta.
SELECT * FROM `tb_posts` WHERE DATE(`post_date_published`) = '2013-05-05 16:20:58'Sin embargo, cuando se excluye el tiempo del parámetro de búsqueda
SELECT * FROM `tb_posts` WHERE DATE(`post_date_published`) = '2013-05-05'Luego obtiene el registro relacionado de la base de datos.
¿Cómo podemos recuperar el registro aún usando el tiempo en la consulta?
Cuando compara una DATE con una expresión que no es también DATE , trata la fecha como si estuviera en el momento 00:00:00 . Esto se menciona en la documentación :
Cuando compara una FECHA, HORA, DATETIME o TIMESTAMP con una cadena constante con los operadores <, <=, =, >=, > o BETWEEN, MySQL normalmente convierte la cadena en un entero largo interno para una comparación más rápida (y también para una verificación de cadenas un poco más "relajada").
Entonces, está comparando la representación numérica de la fecha con la representación numérica de la constante de cadena de fecha y hora, y no coinciden debido a las diferentes horas.
Por lo tanto, debe eliminar el tiempo de la cadena:
SELECT * FROM `tb_posts` WHERE DATE(`post_date_published`) = DATE('2013-05-05 16:20:58')