Oracle日期函数转换为BigQuery语法的问题求助
Oracle日期函数转BigQuery语法解决方案
1. interval_5_min 字段转换
原写法问题
Oracle中日期加数值默认单位为天,所以原代码里*5 /1440是为了把分钟数转成天的小数增量,但BigQuery不支持日期与数值直接相加,且你多余保留了除以1440的逻辑,转INT64后数值会被取整为0,导致计算失效。
正确写法
-- 如果S.DT为DATETIME类型 DATETIME_ADD( DATETIME_TRUNC(S.DT, HOUR), INTERVAL CAST(TRUNC(EXTRACT(MINUTE FROM S.DT)/5)*5 AS INT64) MINUTE ) AS interval_5_min -- 如果S.DT为TIMESTAMP类型,替换函数前缀即可 TIMESTAMP_ADD( TIMESTAMP_TRUNC(S.DT, HOUR), INTERVAL CAST(TRUNC(EXTRACT(MINUTE FROM S.DT)/5)*5 AS INT64) MINUTE ) AS interval_5_min
2. DT 字段转换
原写法问题
同样是BigQuery不支持日期与数值直接相加的问题,你需要把HR、TIME_INT两个数值型的时间增量统一转成INTERVAL类型再叠加。
前置说明
以下写法默认原Oracle逻辑中:
- HR单位为小时
- TIME_INT单位为天(Oracle日期运算默认单位)
正确写法
-- 统一转成秒做增量计算,逻辑更简洁,避免多层嵌套 -- DATETIME类型版本 DATETIME_ADD( DATETIME_TRUNC(STRT_DT, DAY), INTERVAL CAST(7*86400 + HR*3600 + TIME_INT*86400 AS INT64) SECOND ) AS DT -- TIMESTAMP类型版本 TIMESTAMP_ADD( TIMESTAMP_TRUNC(STRT_DT, DAY), INTERVAL CAST(7*86400 + HR*3600 + TIME_INT*86400 AS INT64) SECOND ) AS DT
单位适配说明
如果你的TIME_INT单位不是天,只需要调整TIME_INT对应的换算系数即可:
- 单位为小时:
TIME_INT * 3600 - 单位为分钟:
TIME_INT * 60 - 单位为秒:直接写
TIME_INT即可
内容的提问来源于stack exchange,提问作者jhanby
相关产品推荐
相关产品推荐

