2016-11-30 38 views
1

我有delivery slots有一个from列(datetime)。如何获得时间间隔之间的行

每天以1小时至1小时30分钟的时间间隔存储发货槽。 即上午03时00分,上午04点三十,上午6点,上午7:30,上午9:00 - 10:30等等

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 

我试图让上午03时00分的时间之间的所有delivery_slots - 4:30。 Ive得到了迄今为​​止以下:

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; 

其中还挺作品。有点儿,因为它只是返回交货插槽,其分钟为00。因为最后where条件

那(EXTRACT(MINUTE FROM delivery_slots.from) <= 30

为了给你一个想法,什么我试图想到:

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... 

有没有一种更好的方式去这件事吗?

+0

'因为它只返回分钟为00的交付插槽......我刚刚在本地使用您的数据在Postgres上进行了测试,并且它返回了您想要的数据。 –

回答

1

试试这个:(未测试)

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

希望这会有所帮助。
干杯。

1

要做到这一点,最简单的方式,在我的脑海里,是投from列作为一个类型time,做一个地方>=<=,像这样

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