Oracle转BigQuery:Decode语句转换求助
Oracle到BigQuery的查询语句转换方案
原Oracle代码逻辑分析
原代码通过decode函数根据last_updated_time+3后的星期几,计算FollowUP日期:
- 当该日期是周六(
'D'返回7)、周日(1)、周一(2)时,FollowUP为原日期加5天 - 当该日期是周二(3)时,
FollowUP为原日期加4天 - 其他情况,
FollowUP为原日期加3天
转换后的BigQuery代码
CASE WHEN EXTRACT(DAYOFWEEK FROM DATE_ADD(c.last_updated_time, INTERVAL 3 DAY)) IN (1,2,7) THEN DATE_ADD(c.last_updated_time, INTERVAL 5 DAY) WHEN EXTRACT(DAYOFWEEK FROM DATE_ADD(c.last_updated_time, INTERVAL 3 DAY)) = 3 THEN DATE_ADD(c.last_updated_time, INTERVAL 4 DAY) ELSE DATE_ADD(c.last_updated_time, INTERVAL 3 DAY) END AS FollowUP
转换说明
- 替代
decode函数:BigQuery不支持Oracle的decode,改用标准SQL的CASE WHEN结构,逻辑更直观 - 星期几判断:用
EXTRACT(DAYOFWEEK FROM 日期)替代Oracle的to_char(日期, 'D'),两者均返回1-7(周日=1,周六=7),逻辑完全匹配 - 日期加法:BigQuery用
DATE_ADD(日期, INTERVAL N DAY)替代Oracle的日期+N写法,兼容DATE/TIMESTAMP类型
内容的提问来源于stack exchange,提问作者Zulfikar S Khan
相关产品推荐
相关产品推荐

