SQL 将 hour/minute 转换为现有时间戳时,DateTime 或 Interval 的操作无效

SQL Invalid operation for DateTime or Interval when casting a hour/minute to an existing Timestamp

我正在尝试将现有的 Date 变量转换为时间戳,并从另一个 Time 变量中添加小时和分钟以获得格式为 mm/dd/yyyy hh:mm:00.[=13 的最终变量=]

当前出错的查询行是:

  cast(DepDt as timestamp) + cast(substr(ArrTm, 1, 2) as interval hour) + cast(substr(ArrTm, 3, 2) as interval minute) as Arrv_DTML

不过我似乎找不到问题所在。我已经摆脱了子字符串函数以确保它没有问题,但我似乎无法将 ArrTm 单独转换为间隔。它与变量的格式有关吗?我在 Teradata 运行 这个

DepDt 是一个日期。 ArrTM 是时间变量。

您不能在 Time 上应用 substr,您必须先明确地将其转换为 VarChar:

Cast(DepDt AS TIMESTAMP(0))+
+ Cast(Substr(Cast(ArrTm AS VARCHAR(8)), 1, 5) AS INTERVAL HOUR TO  MINUTE) 

但是有一种更简单的方法可以得到结果:

Cast(DepDt AS TIMESTAMP(0))                           -- date to Timestamp
+ (Extract(HOUR From ArrTm) * INTERVAL '1' HOUR)      -- hour to Interval
+ (Extract(MINUTE From ArrTm) * INTERVAL '1' MINUTE)  -- minute to Interval