sql >> Base de Datos >  >> RDS >> PostgreSQL

Resultados inesperados de la consulta SQL con marcas de tiempo BETWEEN

Comprueba el tipo de datos de las columnas y su zona horaria . Puede estar confundiendo timestamp with time zone y timestamp .

Parece que tienes timestamp en su tabla, pero consulte con timestamptz . De esta forma, todo depende de la zona horaria local de su sesión (que por defecto es la zona horaria del servidor si no se especifica lo contrario).

Cambie ambos a timestamptz o timestamp si las zonas horarias son completamente irrelevantes para usted. (En caso de duda, use timestamptz .)

No es la causa de su problema, pero su consulta probablemente debería ser:

SELECT id, text, category, starttime, endtime, creation 
FROM   entries 
WHERE  starttime >= timestamp '2013-03-21' -- defaults to 00:00 time
AND    starttime <  timestamp '2013-03-22'
ORDER  BY id

a BETWEEN x AND y está casi siempre mal para timestamp tipos debido a los números fraccionarios! ¿Qué haría su consulta con starttime = '2013-03-21T23:59:59.123+00' ?