8

我有一个带有 type 列的 postgresql 表timestamp without timezone。每行增加/减少 1 分钟,例如:

2015-07-28 01:35:00
2015-07-28 01:34:00
2015-07-28 01:33:00
...
...
2015-07-27 23:59:00
2015-07-27 23:58:00
2015-07-27 23:57:00

我正在尝试编写一个查询,该查询将选择某个日期范围之间的所有行,但也会在那些日子的特定时间范围内选择所有行,例如:在 08 期间选择 2015-05-20 到 2015-06-20 之间的所有行: 00:00 至 16:00:00。

到目前为止,我尝试过的所有事情似乎都没有考虑到日期+时间要求。

4

1 回答 1

19

我不确定我是否正确理解了您,但是如果您想要指定日期的所有行,但排除时间部分在以下日期之外的行08:0016:00则应该这样做:

select *
from the_table
where the_column::date between date '2015-05-20' and date '2015-06-20'
  and the_column::time between time '08:00:00' and '16:00:00'

该表达式the_column::date称为强制转换,并将转换timestampdate删除时间信息。the_column::time提取列的时间部分timestamp

运算符将between包括边界(例如,时间正好在 的行16:00:00)。如果您不希望这样,则需要将between条件更改为相应的>and<条件。

于 2015-07-28T06:26:36.650 回答