You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中拆分工作时段并添加对应时段列?

需求实现方案

要在BigQuery中基于start_time和finish_time字段生成逐时段拆分的行记录,可借助数组生成和展开的方式实现,以下是具体步骤和示例:

原表与结果表示例

原表(假设表名为your_table)

idstart_timefinish_timeother_column
12023-10-01 08:00:002023-10-01 10:00:00示例数据A
22023-10-02 14:00:002023-10-02 16:00:00示例数据B

期望结果表

idstart_timefinish_timeother_column时段
12023-10-01 08:00:002023-10-01 10:00:00示例数据A08:00-09:00
12023-10-01 08:00:002023-10-01 10:00:00示例数据A09:00-10:00
12023-10-01 08:00:002023-10-01 10:00:00示例数据A10:00-11:00
22023-10-02 14:00:002023-10-02 16:00:00示例数据B14:00-15:00
22023-10-02 14:00:002023-10-02 16:00:00示例数据B15:00-16:00
22023-10-02 14:00:002023-10-02 16:00:00示例数据B16:00-17:00

实现SQL

SELECT
  t.id,
  t.start_time,
  t.finish_time,
  t.other_column,
  -- 按需格式化时段显示,这里是"起始时间-结束时间"格式
  FORMAT_TIMESTAMP("%H:%M-%H:%M", interval_start, interval_start + INTERVAL 1 HOUR) AS 时段
FROM
  `你的项目ID.你的数据集ID.your_table` t,
  -- 生成从start_time到finish_time的时间戳数组,每1小时递增
  UNNEST(GENERATE_TIMESTAMP_ARRAY(
    t.start_time,
    t.finish_time,
    INTERVAL 1 HOUR
  )) AS interval_start

关键说明

  • GENERATE_TIMESTAMP_ARRAY:生成包含从start_time到finish_time的时间戳数组,递增间隔可自定义(比如1分钟替换为INTERVAL 1 MINUTE)。若finish_time刚好是间隔的整数倍,会包含该时间点。
  • UNNEST:将数组拆分为多行,每行对应一个时段的起始时间。
  • FORMAT_TIMESTAMP:根据需求调整时段格式,若只需提取小时数,可替换为EXTRACT(HOUR FROM interval_start) AS 时段。

如果时间字段是DATE类型,只需将GENERATE_TIMESTAMP_ARRAY换成GENERATE_DATE_ARRAY,FORMAT_TIMESTAMP换成FORMAT_DATE即可适配。


内容的提问来源于stack exchange,提问作者JG K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:46:06