jueves, 8 de agosto de 2013

Consultar la fecha de un Timestamp en base de datos SQL

El tipo Timestamp permite mostrar la fecha (entendida como día, mes y año) así como la hora (hora, minutos, segundos, milisegundos). El problema puede surgir cuando en una base de datos tienes almacenados varios elementos así como sus Timestamps para saber su fecha y quieres obtener los datos comprendidos entre dos fechas.

Vamos a suponer que se tiene una tabla tabla en donde uno de los campos es fecha, campo que contiene el Timestamp, y que se quieren obtener todos los datos de la tabla entre el 1 de agosto y el 8 de agosto de 2013. La sentencia SQL sería la siguiente:
    SELECT * FROM tabla
    WHERE fecha BETWEEN '2013-08-01' AND '2013-08-08'

Realizando esta consulta se puede observar que devuelve los datos y que a priori está todo correcto, aunque al final se nota que no devuelve datos del día 8. ¿La razón? Al no especificar la hora se pone por defecto a 00:00:00 o lo que es lo mismo, justo al empezar el día. Una solución simple sería aumentar en uno el día y buscar hasta el día 9 y no hasta el 8. Otra manera sería indicando también la hora en la consulta, quedando como se vería en la siguiente sentencia SQL:
    SELECT * FROM tabla
    WHERE fecha BETWEEN '2013-08-01' AND '2013-08-08 23:59:59'

Al indicar la hora también ha tenido en cuenta el día 8 con lo cual ese problema estaría solucionado. Esto se puede utilizar también para consultar los datos de un día en concreto. Si se pusiera simplemente en la consulta un "WHERE fecha = '2013-08-08'" lo más probable sería no obtener ningún resultado, puesto que no estaría buscando los datos del día sino los de ese día a las 00:00:00. La solución sería como la anterior, establecer un período de tiempo desde las 00:00:00 de ese día hasta las 23:59:59.
    SELECT * FROM tabla
    WHERE fecha BETWEEN '2013-08-08' AND '2013-08-08 23:59:59'

No hay comentarios:

Publicar un comentario