2016-11-30 24 views
1

Ich habe delivery slots, die eine from Spalte hat (datetime).So erhalten Sie Zeilen zwischen Zeitintervallen

Lieferungsslots werden als 1 Stunde bis 1 Stunde und 30 Minutenintervalle täglich gespeichert. das heißt von 3.00 bis 04.30, von 06.00 Uhr bis 07.30 Uhr, 09.00 Uhr bis 10.30 Uhr und so weiter

id |  from   
------+--------------------- 
    1 | 2016-01-01 03:00:00 
    2 | 2016-01-01 04:30:00 
    3 | 2016-01-01 06:00:00 
    4 | 2016-01-01 07:30:00 
    5 | 2016-01-01 09:00:00 
    6 | 2016-01-01 10:30:00 
    7 | 2016-01-01 12:00:00 
    8 | 2016-01-02 03:00:00 
    9 | 2016-01-02 04:30:00 
    10 | 2016-01-02 06:00:00 
    11 | 2016-01-02 07:30:00 
    12 | 2016-01-02 09:00:00 
    13 | 2016-01-02 10:30:00 
    14 | 2016-01-02 12:00:00 

Ich versuche, alle delivery_slots zwischen den Stunden von 03.00 Uhr zu bekommen - 04.30. Ive erhielt die folgenden bisher:

SELECT * FROM delivery_slots WHERE EXTRACT(HOUR FROM delivery_slots.from) >= 3 AND EXTRACT(MINUTE FROM delivery_slots.from) >= 0 AND EXTRACT(HOUR FROM delivery_slots.from) <= 4 AND EXTRACT(MINUTE FROM delivery_slots.from) <= 30; 

Welche irgendwie funktioniert. Irgendwie, weil es nur Lieferschächte gibt, die Minuten von 00 haben.

Das ist, weil der letzten where Zustand (EXTRACT(MINUTE FROM delivery_slots.from) <= 30)

Ihnen eine Vorstellung zu geben, was ich zu erwarten, ich versuche:

id |  from   
-------+--------------------- 
    1 | 2016-01-01 03:00:00 
    2 | 2016-01-01 04:30:00 
    8 | 2016-01-02 03:00:00 
    9 | 2016-01-02 04:30:00 
    15 | 2016-01-03 03:00:00 
    16 | 2016-01-03 04:30:00 
      etc... 

Gibt es einen besseren Weg, dies zu gehen über?

+0

'da es nur Lieferschächte gibt, die Minuten von 00' haben ... Ich habe gerade lokal auf Postgres getestet, indem ich Ihre Daten verwendet habe, und es hat die gewünschten Daten zurückgegeben. –

Antwort

1

Versuchen: (nicht getestet)

SELECT * FROM delivery_slots WHERE delivery_slots.from::time >= '03:00:00' AND delivery_slots.from::time <= '04:30:00' 

Hoffe, das hilft.
Prost.

1

Der einfachste Weg, dies zu tun, in meinem Kopf, ist die from Spalte als Typ ein time und zu tun, wo wie so >= und <=, werfen diese

select * from testing where (date::time >= '3:00'::time and date::time <= '4:30'::time); 
Verwandte Themen