TeradataSQL:时间到字符串,添加到日期并与另一个时间和数据进行比较
TeradataSQL: Time to String, Add to Date and Compare to Another Time and Data
我正在尝试找出在 Teradata SQL Assistant 中进行比较的最简洁方法。我有计划的开始日期 (TimeStamp)、计划开始时间 (varchar)、实际开始和结束时间 (TimeStamp)。我需要合并计划的开始日期和时间,并能够在不修改原始数据的情况下将其与实际开始和结束日期和时间进行比较(因为它不是我的)。我知道预定开始时间 [SST] 是带有 AM/PM 后缀的 24 小时时间格式,但正如我之前所说,我无法更改它。
我尝试执行 select cast(substr(scheduled_start_date,1,5) as TIMESTAMP(0)) from DB.TBL
但出现 "Invalid timestamp" 错误。下面有示例 table 数据。
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
谢谢!
有几件事要尝试:
将单独的计划日期和计划时间字段转换为字符串,将它们连接起来,然后将其提供给 TIMESTAMP CAST。类似于:
SELECT
CAST(CAST(Scheduled_Date AS DATE) AS VARCHAR(25)) AS Date_String,
CAST(CAST(Scheduled_Time AS TIME FORMAT 'HH:MM BB') AS VARCHAR(25)) AS Time_String,
CAST(TRIM(Date_String) || ' ' || TRIM(Time_String) AS TIMESTAMP(0)) AS MyTimestamp
将计划时间字段转换为 TIME 数据类型。将 Scheduled Date 字段转换为 DATE 数据类型。然后以某种方式将两者组合成一个 TIMESTAMP 字段——使用 CAST 或某种时间戳构造函数(不确定这是否可能)
只要正确设置字符串格式,选项 1 就应该可以正常工作。尽量避免使用 SUBSTRING,而是使用 FORMAT 转换为 DATE/TIME 字段。不确定选项 2。查看这些 link 以了解如何使用 FORMAT 子句格式化 DATE/TIME 字段:
抱歉,我无法访问 TD 系统进行测试。如果你有运气,请告诉我。
您需要将计划开始时间转换为间隔,然后您可以轻松地将其添加到开始日期:
scheduled_start_date
+ Cast(Substr(scheduled_start_time, 1,5) AS INTERVAL HOUR TO MINUTE)
A start date 这是一个 timestamp 似乎表明这是从 Oracle/SQL Server?
还有一个24小时格式加上AM/PM后缀也很奇怪。
我正在尝试找出在 Teradata SQL Assistant 中进行比较的最简洁方法。我有计划的开始日期 (TimeStamp)、计划开始时间 (varchar)、实际开始和结束时间 (TimeStamp)。我需要合并计划的开始日期和时间,并能够在不修改原始数据的情况下将其与实际开始和结束日期和时间进行比较(因为它不是我的)。我知道预定开始时间 [SST] 是带有 AM/PM 后缀的 24 小时时间格式,但正如我之前所说,我无法更改它。
我尝试执行 select cast(substr(scheduled_start_date,1,5) as TIMESTAMP(0)) from DB.TBL
但出现 "Invalid timestamp" 错误。下面有示例 table 数据。
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
谢谢!
有几件事要尝试:
将单独的计划日期和计划时间字段转换为字符串,将它们连接起来,然后将其提供给 TIMESTAMP CAST。类似于:
SELECT CAST(CAST(Scheduled_Date AS DATE) AS VARCHAR(25)) AS Date_String, CAST(CAST(Scheduled_Time AS TIME FORMAT 'HH:MM BB') AS VARCHAR(25)) AS Time_String, CAST(TRIM(Date_String) || ' ' || TRIM(Time_String) AS TIMESTAMP(0)) AS MyTimestamp
将计划时间字段转换为 TIME 数据类型。将 Scheduled Date 字段转换为 DATE 数据类型。然后以某种方式将两者组合成一个 TIMESTAMP 字段——使用 CAST 或某种时间戳构造函数(不确定这是否可能)
只要正确设置字符串格式,选项 1 就应该可以正常工作。尽量避免使用 SUBSTRING,而是使用 FORMAT 转换为 DATE/TIME 字段。不确定选项 2。查看这些 link 以了解如何使用 FORMAT 子句格式化 DATE/TIME 字段:
抱歉,我无法访问 TD 系统进行测试。如果你有运气,请告诉我。
您需要将计划开始时间转换为间隔,然后您可以轻松地将其添加到开始日期:
scheduled_start_date
+ Cast(Substr(scheduled_start_time, 1,5) AS INTERVAL HOUR TO MINUTE)
A start date 这是一个 timestamp 似乎表明这是从 Oracle/SQL Server?
还有一个24小时格式加上AM/PM后缀也很奇怪。