You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将Teradata日期转换CASE语句改写为Hive兼容格式

Teradata转Hive:日期计算语句兼容修改

原Teradata可执行语句

CASE 
WHEN Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) > 2956565 THEN Cast('2999-12-31'AS DATE) 
WHEN Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) = 0 THEN Cast('1900-01-01' AS DATE) 
ELSE Cast('1900-01-01' AS DATE) + Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) - 1 END 
AS ACCT_OPEN_DT

Hive执行报错信息

Error while compiling statement: FAILED: SemanticException line 
0:undefined:-1 Wrong arguments 'ACCT_OPEN_DT': No matching method for 
class org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPDTIPlus with 
(date, int)

问题原因

Hive不支持Teradata中直接将DATE类型与INTEGER类型做加减运算的语法,必须使用Hive内置的日期函数实现日期偏移计算。

修改后的Hive兼容语句

CASE 
WHEN CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) > 2956565 THEN CAST('2999-12-31' AS DATE)
WHEN CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) = 0 THEN CAST('1900-01-01' AS DATE)
ELSE DATE_ADD(CAST('1900-01-01' AS DATE), CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) - 1)
END AS ACCT_OPEN_DT

关键修改点

  • 替换原Teradata的DATE + INTEGER - 1运算为Hive的DATE_ADD()函数,该函数支持传入基准日期和偏移天数(整数)计算目标日期。
  • 保留原逻辑的条件判断规则,仅修改日期计算的实现方式。

内容的提问来源于stack exchange,提问作者ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:35:37