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

Auswählen von Datensätzen zwischen zwei Zeitstempeln

Was ist falsch an:

SELECT a,b,c
FROM   table
WHERE  xtime BETWEEN '2012-04-01 23:55:00'::timestamp
                 AND now()::timestamp;

Wenn Sie mit einer Sekundenanzahl als interval arbeiten möchten :

...
WHERE  xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm
                 AND now()::timestamp;

Beachten Sie, wie ich das standardmäßige ISO 8601-Datumsformat YYYY-MM-DD h24:mi:ss verwendet habe was mit jedem Gebietsschema oder DateStyle Einstellung.

Beachten Sie auch, dass der erste Wert für BETWEEN Konstrukt muss das kleinere sein. Wenn Sie nicht wissen, welcher Wert kleiner ist, verwenden Sie BETWEEN SYMMETRIC stattdessen.

In Ihrer Frage beziehen Sie sich auf den Datetime-Typ timestamp B. "Datum", "Uhrzeit" und "Zeitraum". Im Titel haben Sie den Begriff "Zeitrahmen" verwendet, den ich in "Zeitstempel" geändert habe. All diese Begriffe sind falsch. Wenn Sie sie frei austauschen, ist die Frage noch schwerer zu verstehen.

Das und die Tatsache, dass Sie nur die Frage psql getaggt haben (das Problem betrifft kaum das Befehlszeilenterminal) könnte erklären, warum tagelang niemand geantwortet hat. Normalerweise ist es hier eine Sache von Minuten. Ich hatte Schwierigkeiten, Ihre Frage zu verstehen, musste sie ein paar Mal lesen.

Sie müssen die Datentypen date verstehen , interval , time und timestamp - mit oder ohne Zeitzone. Lesen Sie zunächst das Kapitel "Datums-/Zeittypen" im Handbuch .

Die Fehlermeldung hätte auch viel gebracht.