将小时/分钟强制转换为现有时间戳时,对DateTime或Interval的SQL操作无效
我试图将现有的日期变量转换为时间戳,并从另一个时间变量中添加小时和分钟,以获得格式为mm/dd/yyyy hh:mm:00的最终变量 出错的查询的当前行为:将小时/分钟强制转换为现有时间戳时,对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 但我似乎找不到问题所在。我已经去掉了子字符串函数,以确保它没有问题,但我似乎
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(可以添加)