如何在BigQuery中计算INTERVAL类型的总分钟数?
在BigQuery中计算时间间隔的总分钟数
情况1:直接基于原始TIMESTAMP字段计算
如果ended_at和created_at都是TIMESTAMP类型,无需先生成间隔字符串,直接用TIMESTAMP_DIFF函数一步算出总分钟数:
SELECT TIMESTAMP_DIFF(ended_at, created_at, MINUTE) AS total_minutes FROM your_table;
该函数会自动将两个时间戳的所有时间差(年、月、日、时、分等)转换为总分钟数,完全覆盖你的需求场景。
情况2:基于已有的间隔字符串计算
如果已经得到了类似0-0 0 1:8:23.810192的间隔字符串(假设字段名为interval_str),可以通过正则提取核心时间分量计算:
SELECT SAFE_CAST(REGEXP_EXTRACT(interval_str, r' (\d+):') AS INT64) * 60 + SAFE_CAST(REGEXP_EXTRACT(interval_str, r':(\d+):') AS INT64) AS total_minutes FROM your_table;
- 正则
r' (\d+):'提取小时部分(空格后到第一个冒号的数字) - 正则
r':(\d+):'提取分钟部分(两个冒号之间的数字) - 按
小时*60 + 分钟计算总分钟数,对应例子中的1*60+8=68,完全匹配预期结果。
如果需要包含秒的小数部分(比如把23.81秒折算为分钟),可以补充秒的计算逻辑:
SELECT SAFE_CAST(REGEXP_EXTRACT(interval_str, r' (\d+):') AS INT64) * 60 + SAFE_CAST(REGEXP_EXTRACT(interval_str, r':(\d+):') AS INT64) + SAFE_CAST(REGEXP_EXTRACT(interval_str, r':(\d+\.\d+)') AS FLOAT64) / 60 AS total_minutes FROM your_table;
内容的提问来源于stack exchange,提问作者y.selivonchyk
相关产品推荐
相关产品推荐

