PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Unerwartete Ergebnisse einer SQL-Abfrage mit BETWEEN-Zeitstempeln

Überprüfen Sie den Datentyp der Spalten und Ihrer Zeitzone . Möglicherweise verwirren Sie timestamp with time zone und timestamp .

Sieht so aus, als hätten Sie timestamp in Ihrer Tabelle, aber Abfrage mit timestamptz . Auf diese Weise hängt alles von der lokalen Zeitzone Ihrer Sitzung ab (die standardmäßig die Zeitzone des Servers ist, wenn nicht anders angegeben.)

Stellen Sie beide auf timestamptz um , oder timestamp wenn Zeitzonen für Sie völlig irrelevant sind. (Im Zweifelsfall timestamptz verwenden .)

Nicht die Ursache Ihres Problems, aber Ihre Abfrage sollte wahrscheinlich lauten:

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 ist fast immer falsch für timestamp Typen aufgrund von Bruchzahlen! Was würde Ihre Abfrage mit starttime = '2013-03-21T23:59:59.123+00' machen ?