如何在BigQuery中计算Datetime时间间隔并新增时长列
在BigQuery中计算Datetime时间间隔并新增DURATION列
核心解决方案:正确使用DATETIME_DIFF()函数
你之前用DATETIME_DIFF()失败大概率是参数顺序搞反了——BigQuery里这个函数的参数顺序是结束时间在前,开始时间在后,最后指定时间单位。
针对你的表格,运行以下SQL就能新增DURATION列(以分钟为单位,可按需修改时间单位):
SELECT started_at, ended_at, DATETIME_DIFF(ended_at, started_at, MINUTE) AS DURATION FROM `你的项目名.你的数据集名.你的表名`;
关键注意事项
- 参数顺序:
DATETIME_DIFF(end_datetime, start_datetime, unit),颠倒顺序会得到负数结果 - 支持的时间单位:
SECOND/MINUTE/HOUR/DAY/WEEK/MONTH/QUARTER/YEAR,按需替换即可 - 如果
started_at和ended_at是TIMESTAMP类型而非DATETIME,改用TIMESTAMP_DIFF()函数,用法完全一致
进阶:格式化时长为HH:MM:SS格式
要是需要更易读的时分秒格式,可结合FORMAT_TIMESTAMP()转换总秒数:
SELECT started_at, ended_at, DATETIME_DIFF(ended_at, started_at, MINUTE) AS duration_minutes, FORMAT_TIMESTAMP('%H:%M:%S', TIMESTAMP_ADD(TIMESTAMP('1970-01-01'), INTERVAL DATETIME_DIFF(ended_at, started_at, SECOND) SECOND)) AS duration_formatted FROM `你的项目名.你的数据集名.你的表名`;
你的示例数据运行结果
| started_at | ended_at | DURATION | duration_formatted |
|---|---|---|---|
| 2020-04-26 17:45:00 UTC | 2020-04-26 18:12:00 UTC | 27 | 00:27:00 |
| 2020-04-17 17:08:00 UTC | 2020-04-17 17:17:00 UTC | 9 | 00:09:00 |
| 2020-04-01 17:54:00 UTC | 2020-04-01 18:08:00 UTC | 14 | 00:14:00 |
内容的提问来源于stack exchange,提问作者Sandro Lélis
相关产品推荐
相关产品推荐

