如何在时间间隔之间获取行
How to get rows between time intervals
我的 delivery slots
有一个 from
列 (datetime
)。
送货时段存储为每天 1 小时到 1 小时 30 分钟的间隔。
即 3.00am-4.30am、6.00am-7.30am、9.00am-10.30am 等等
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
我试图在凌晨 3 点到凌晨 4 点之间获取所有 delivery_slots
。到目前为止,我得到了以下信息:
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...
有没有更好的方法来解决这个问题?
在我看来,最简单的方法是将 from
列转换为类型 time
并在 >=
和 <=
处执行操作,像这样
select * from testing where (date::time >= '3:00'::time and date::time <= '4:30'::time);
试试这个:(未测试)
SELECT * FROM delivery_slots WHERE delivery_slots.from::time >= '03:00:00' AND delivery_slots.from::time <= '04:30:00'
希望对您有所帮助。
干杯。
我的 delivery slots
有一个 from
列 (datetime
)。
送货时段存储为每天 1 小时到 1 小时 30 分钟的间隔。 即 3.00am-4.30am、6.00am-7.30am、9.00am-10.30am 等等
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
我试图在凌晨 3 点到凌晨 4 点之间获取所有 delivery_slots
。到目前为止,我得到了以下信息:
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...
有没有更好的方法来解决这个问题?
在我看来,最简单的方法是将 from
列转换为类型 time
并在 >=
和 <=
处执行操作,像这样
select * from testing where (date::time >= '3:00'::time and date::time <= '4:30'::time);
试试这个:(未测试)
SELECT * FROM delivery_slots WHERE delivery_slots.from::time >= '03:00:00' AND delivery_slots.from::time <= '04:30:00'
希望对您有所帮助。
干杯。