向现有时间戳转换小时/分钟时,DateTime或Interval的SQL无效操作

时间:2018-11-05 22:27:31

标签: sql casting timestamp teradata datetime-format

我正在尝试将现有的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是一个时间变量。

1 个答案:

答案 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