每天选择特定时间范围的时间戳数据

时间:2015-07-28 06:18:31

标签: postgresql sql-timestamp

我有一个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

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

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

1 个答案:

答案 0 :(得分:10)

我不确定我是否理解正确,但是如果您想要指定所有日期的所有行,但是从时间部分超出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::' and '16:00:00'

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

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