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

Posted

技术标签:

【中文标题】每天选择特定时间范围的时间戳数据【英文标题】:Select timestamp data for specific time range each day 【发布时间】:2015-07-28 06:18:30 【问题描述】:

我有一个带有 timestamp without timezone 类型列的 postgresql 表。每行增加/减少 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 年 5 月 20 日到 2015 年 6 月 20 日之间的所有行08:00:00 至 16:00:00。

到目前为止,我所做的一切似乎都没有考虑到日期和时间要求。

【问题讨论】:

【参考方案1】:

我不确定我是否理解正确,但如果您想要指定日期的所有行,但排除时间部分在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 称为强制转换,会将timestamp 转换为date,从而删除时间信息。 the_column::time 提取timestamp 列的时间部分。

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

【讨论】:

谢谢。我不知道如何施法,这就是我苦苦挣扎的原因。 跟进问题@a_horse_with_no_name .. 如果我想在当天获得16:00:00第二天之间的08:00:00,怎么做? between current_date + time '16:00' and (current_date + 1)::timestamp 看到这个关于使用betweenwiki.postgresql.org/wiki/… @Curtis:我没有使用带有时间戳between。我指出了使用它的缺点。

以上是关于每天选择特定时间范围的时间戳数据的主要内容,如果未能解决你的问题,请参考以下文章

提取时间戳在特定范围内的 Python Pandas 记录[关闭]

在 postgres 中,如何从事件日志类型表(具有时间戳)中获取特定时间范围内字段的总和(或汇总)

在 VBA 中选择特定的工作表和范围

如何在火花中创建特定的时间范围

查找特定日期范围内每天的门票总数

MySQL for Rails 在特定日期范围内每天获得 AVERAGE 的最佳方法