2016-04-27 6 views
1

ich Postgres bin mit und ich habe diesen Datensatz, der die date_time Spalte:Postgres Auswahlabfrage auf Zeitspalte erzeugen Ausgang falsch

"2015-09-01 09:41:15" 

Wenn ich eine psql Abfrage von pgAdmin:

select * from table where date_time >= '2015-08-31' and date_time <= '2015-09-01' 

Dieser spezifische Datensatz wird nicht angezeigt, obwohl ich = sign verwendet habe. Wenn ich < = '2015-09-02' verwende, erscheint es. Gibt es eine Möglichkeit, dass der Datensatz in einer Abfrage mit < = '2015-09-01' angezeigt wird, da its = zur abgefragten Zeit?

Meine Zeitspalte:

date_time timestamp without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone, 

Antwort

1

Sie die Zeit zu vergessen. Sie könnte entweder Ihre date_time Feld Datum für den Vergleich Stimmen (es gibt eine Leistung toll, es kann sehr langsam in großen Datensätzen sein):

select * from table 
where date_time >= '2015-08-31' and date_time::date <= '2015-09-01' 

oder Sie können Ihre Start- und Enddaten Zeitstempel fest:

select * from table 
where date_time >= '2015-08-31' and date_time < ('2015-09-01'::date+1)::timestamp 
+1

dies mein Problem behoben. Vielen Dank. –

+0

Sie können eine einfache Erklärung hinzufügen, warum dies geschieht. Und das ist so, weil die Spalte "Timestamp ohne Zeitzone" ist, also wird der String ''2015-09-01'', der zum Vergleich verwendet wird, standardmäßig auch auf' Timestamp ohne Zeitzone' umgewandelt. In diesem Fall wird 'PostgreSQL' die Zeit um Mitternacht setzen, so dass' '2015-09-01'' zu' '2015-09-01 00: 00: 00': Zeitstempel ohne Zeitzone wird '. –