Teradata TeradasQL:时间字符串、添加到日期并与其他时间和数据进行比较

Teradata TeradasQL:时间字符串、添加到日期并与其他时间和数据进行比较,teradata,teradata-sql-assistant,Teradata,Teradata Sql Assistant,我正试图找出在Teradata SQL Assistant中进行比较的最干净的方法。我有计划开始日期时间戳,计划开始时间varchar,实际开始和结束时间时间戳。我需要合并计划的开始日期和时间,并能够将其与实际的开始和结束日期和时间进行比较,而无需修改原始数据,因为它不是我的。我意识到计划开始时间[SST]是一种24小时格式,带有AM/PM后缀,但正如我之前所说的,我不能改变它 我试图从DB.TBL中选择castsubstrscheduled_start_date,1,5作为timestamp

我正试图找出在Teradata SQL Assistant中进行比较的最干净的方法。我有计划开始日期时间戳,计划开始时间varchar,实际开始和结束时间时间戳。我需要合并计划的开始日期和时间,并能够将其与实际的开始和结束日期和时间进行比较,而无需修改原始数据,因为它不是我的。我意识到计划开始时间[SST]是一种24小时格式,带有AM/PM后缀,但正如我之前所说的,我不能改变它

我试图从DB.TBL中选择castsubstrscheduled_start_date,1,5作为timestamp 0,但得到了无效的timestamp错误。下面是示例表数据

Sch Start Date        Sch Start Time    Actual Start            Actual End
09/11/2017 00:00:00   11:30 AM          09/11/2017  11:34:16    09/11/2017 11:58:00
05/26/2017 00:00:00   15:30 PM          05/26/2017  15:40:00    05/26/2017 15:55:15
11/06/2017 00:00:00   19:30 PM          11/06/2017  21:25:00    11/06/2017 21:45:00

谢谢

有几件事可以尝试:

将单独的“计划日期”和“计划时间”字段转换为字符串,将它们连接起来,并将其输入到时间戳转换中。比如:

挑选 CastScheduled_Date作为Date作为VARCHAR25作为Date_字符串, CastScheduled_Time作为时间格式'HH:MM BB'作为VARCHAR25作为时间字符串, CASTTRIMDate_字符串| | | | TRIMTime_字符串作为时间戳0作为MyTimestamp

将计划时间字段强制转换为时间数据类型。将计划日期字段强制转换为日期数据类型。然后以某种方式将二者结合到一个时间戳字段中-使用强制转换或某种时间戳构造函数,但不确定这是否可行

只要正确设置字符串的格式,选项1就一定可以工作。尽量避免使用子字符串,而是使用格式转换为日期/时间字段。不确定选项2。查看以下链接,了解如何使用format子句格式化日期/时间字段:


抱歉,我无法访问TD系统进行测试。如果您运气好,请告诉我。

您需要将计划开始时间转换为间隔,然后您可以轻松地将其添加到开始日期:

scheduled_start_date
+ Cast(Substr(scheduled_start_time, 1,5) AS INTERVAL HOUR TO MINUTE)
作为时间戳的开始日期似乎表明这是从Oracle/SQL Server移植的


加上AM/PM后缀的24小时时间格式也很奇怪。

我相信这是一个甲骨文。而且它工作得很好。谢谢是的,我不知道是谁设计了这个,也不知道为什么它有这样的价值观,但唉。