MYSQL: Algunos detalles importantes en las consultas con fechas

Introducción

Si trabajamos con MySQL y PHP, los campos de tipo fecha suelen presentar algunas dificultades en su manejo, cuando queremos realizar una consulta a una tabla que contenga este tipo de campo.
Mostraremos a través de dos ejemplos los detalles que hay que atender cuando queremos realizar una consulta a una tabla o conjunto de tablas relacionadas, y en dicha consulta este involucrado un campo de tipo fecha.

Ejemplo 1: Consulta de selección

Veamos la consulta que muestra la figura siguiente:
consulta_de_seleccion

Vemos que la consulta se realiza sobre tres tablas relacionadas: Contratos, Docentes y Materias. Queremos seleccionar los registros que estén dentro un intervalo de fechas que llamaremos ‘fecha_desde’ al valor menor, y ‘fecha_hasta’ al mayor valor o sea la fecha más próxima en el tiempo. Por ejemplo:

‘fecha_desde’ = ‘2016-05-01’
‘fecha_hasta’ = ‘2016-06-01’

Previamente el usuario llena un formulario, donde indica desde que fecha hasta que fecha quiere realizar la consulta de selección. Los valores seleccionados por el usuario, son enviados a la consulta por medio de la variable $filtro

Mediante el uso de la condición WHERE le pedimos a MYSQL que seleccione los registros que cumplen la condición.

Es muy importante que la forma en que están escritas las fechas límites, sea igual a la estructura del campo fecha sobre el que se va actuar. En este caso, el campo fecha solo tiene año, mes y día (no hay datos de tiempo como horas, minutos o segundos). Por otro lado el separador es el guión corto y el orden de los elementos es: Y-m-d Es decir año (con cuatro cifras)-mes-día, como podríamos verlo por medio PHPMyAdmin

Ejemplo 2: Consulta de actualización

La estructura de la consulta cambia significativamente cuando queremos actualizar o modificar algún valor de un campo fecha. Veamos la siguiente consulta:

consulta_de_actualizacion

En esta consulta queremos reemplazar el valor de un campo fecha de nombre fechaArchivo por la fecha actual si se cumple la condición WHERE. El campo tiene cuatro lugares para el año, dos lugares para el mes y dos lugares para el día. No usamos datos de tiempo.
En primer lugar guardamos la fecha actual en la variable $fecha_actual  y observemos un detalle muy importante: el formato elegido es: Ymd y no Y-m-d como teníamos en la consulta de selección. Si no hacemos esto, la fecha no se actualizará correctamente y la consulta no arrojará ningún mensaje de error, pero veremos en la tabla que los registros afectados, en lugar de tener la fecha actual, muestran. en PHPMyAdmin, una fecha con el valor ‘0000-00-00’ Esto es claramente un síntoma de que la forma en que pasamos el valor de la fecha no es entendida por MYSQL y entonces no actualiza el campo con la fecha correcta. Vemos que el nuevo valor se asigna mediante la orden SET y el valor se pasa mediante el formato Ymd.