Google BigQuery标准SQL中时间减小时操作报错的解决方案咨询
解决BigQuery标准SQL中时间减小时的问题
首先得明确你遇到的两个错误的原因:
- 第一个错误
DATE_SUB does not support the HOUR date part:因为DATE_SUB函数是专门针对DATE类型(仅包含年月日)的操作,它不支持HOUR这种时间粒度的参数。如果你的t2.time是TIMESTAMP或DATETIME类型(包含时分秒),得用对应类型的时间函数。 - 第二个错误
expected INTERVAL expression at ...:你用的是BigQuery Legacy SQL的DATE_ADD语法,但标准SQL要求必须使用INTERVAL子句的格式,不能直接传负数参数。
正确的写法(根据字段类型选择)
假设你的t2.time是TIMESTAMP类型(最常见的时间戳类型),减1小时可以用两种方式:
- 直接用
TIMESTAMP_SUB:TIMESTAMP_SUB(t2.time, INTERVAL 1 HOUR) - 或者用
TIMESTAMP_ADD加负的时间间隔:TIMESTAMP_ADD(t2.time, INTERVAL -1 HOUR)
如果你的字段是DATETIME类型,把上面的函数换成DATETIME_SUB或DATETIME_ADD即可:
DATETIME_SUB(t2.click_time, INTERVAL 1 HOUR) -- 或者 DATETIME_ADD(t2.click_time, INTERVAL -1 HOUR)
如果你的字段是DATE类型(仅年月日),HOUR操作本身没有意义,但如果是要将其转换为带时间的类型再减小时,可以先转成TIMESTAMP:
TIMESTAMP_SUB(TIMESTAMP(t2.time), INTERVAL 1 HOUR)
小提示
执行前可以先确认字段的数据类型,在BigQuery的表结构里就能看到。选对对应类型的函数,就能避免这类语法错误啦~
内容的提问来源于stack exchange,提问作者dooder
相关产品推荐
相关产品推荐

