PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Résultats inattendus d'une requête SQL avec des horodatages BETWEEN

Vérifiez le type de données des colonnes et votre fuseau horaire . Vous pouvez confondre timestamp with time zone et timestamp .

Il semble que vous ayez timestamp dans votre table, mais interrogez avec timestamptz . De cette façon, tout dépend du fuseau horaire local de votre session (qui est par défaut le fuseau horaire du serveur, sauf indication contraire.)

Passez les deux à timestamptz , ou timestamp si les fuseaux horaires ne vous concernent absolument pas. (En cas de doute, utilisez timestamptz .)

Ce n'est pas la cause de votre problème, mais votre requête devrait probablement être :

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 presque toujours faux pour timestamp types dus aux nombres fractionnaires ! Que ferait votre requête avec starttime = '2013-03-21T23:59:59.123+00' ?