将小时/分钟强制转换为现有时间戳时,对DateTime或Interval的SQL操作无效

将小时/分钟强制转换为现有时间戳时,对DateTime或Interval的SQL操作无效,sql,casting,timestamp,teradata,datetime-format,Sql,Casting,Timestamp,Teradata,Datetime Format,我试图将现有的日期变量转换为时间戳,并从另一个时间变量中添加小时和分钟,以获得格式为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 但我似乎找不到问题所在。我已经去掉了子字符串函数,以确保它没有问题,但我似乎

我试图将现有的日期变量转换为时间戳,并从另一个时间变量中添加小时和分钟,以获得格式为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是一个时间变量。

不能对时间应用
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

不能在某个时间应用
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

你可能想尝试各种不同的方法,而不是强制转换。我正在研究这个…它也可以用现有的变量来完成吗?或者仅硬编码日期/时间?尝试以下操作:选择时间戳(curdate())@汤姆德雷克:这是Teradata而不是MySQL。我不知怎么错过了。但是,使用不同的语法。而不是强制转换,你可能想尝试各种。我正在研究这个…它也可以用现有的变量来完成吗?或者仅硬编码日期/时间?尝试以下操作:选择时间戳(curdate())@汤姆德雷克:这是Teradata而不是MySQL。我不知怎么错过了。但是,使用不同的语法。这是有效的!非常感谢你。你能解释一下“*Interval'1'Hour/Minute”对我的好奇心有什么作用吗?EXTRACT返回一个数字(不能添加到时间戳中),但当你将它乘以'1'Hour/Minute时,它会变为一个Interval(可以添加),这很有效!非常感谢你。你能解释一下“*Interval'1'Hour/Minute”对我的好奇心有什么作用吗?EXTRACT返回一个数字(不能添加到时间戳中),但当你将它乘以'1'Hour/Minute时,它就变成了一个Interval(可以添加)