我正在尝试将现有的Date变量转换为时间戳,并从另一个Time变量中添加小时和分钟,以获取格式为mm / dd / yyyy hh:mm:00的最终变量。
错误中查询的当前行是:
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是一个时间变量。
答案 0 :(得分:2)
您不能一次应用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