0

我试图找出在 Teradata SQL Assistant 中进行比较的最简洁方法。我有计划的开始日期 (TimeStamp)、计划的开始时间 (varchar)、实际的开始和结束时间 (TimeStamp)。我需要合并预定的开始日期和时间,并能够在不修改原始数据的情况下将其与实际开始和结束日期和时间进行比较(因为它不是我的)。我知道预定开始时间 [SST] 是 24 小时制,带有 AM/PM 后缀,但就像我之前说的,我无法更改它。

我尝试进行选择cast(substr(scheduled_start_date,1,5) as TIMESTAMP(0)) from DB.TBL,但收到“无效时间戳”错误。下面有示例表数据。

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

谢谢!

4

2 回答 2

1

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

scheduled_start_date
+ Cast(Substr(scheduled_start_time, 1,5) AS INTERVAL HOUR TO MINUTE)

时间戳的开始日期似乎表明这是从 Oracle/SQL Server 移植的?

而且带有 AM/PM 后缀的 24 小时时间格式 也很奇怪。

于 2017-11-28T07:45:02.693 回答
0

有几件事可以尝试:

  1. 将单独的 Scheduled Date 和 Scheduled Time 字段转换为字符串,将它们连接起来,并将其提供给 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

  2. 将 Scheduled Time 字段转换为 TIME 数据类型。将 Scheduled Date 字段转换为 DATE 数据类型。然后以某种方式将两者组合成一个 TIMESTAMP 字段——使用 CAST 或某种时间戳构造函数(不确定这是否可能)

只要您正确格式化字符串,选项 1 就应该可以正常工作。尽量避免使用 SUBSTRING,而是使用 FORMAT 来转换为 DATE/TIME 字段。不确定选项 2。查看这些链接,了解如何使用 FORMAT 子句格式化 DATE/TIME 字段:

https://www.info.teradata.com/HTMLPubs/DB_TTU_16_00/index.html#page/SQL_Reference%2FB035-1143-160K%2Fmuq1472241377538.html%23wwID0EPHKR

https://www.info.teradata.com/HTMLPubs/DB_TTU_16_00/index.html#page/SQL_Reference/B035-1143-160K/cmy1472241389785.html

抱歉,我无权访问 TD 系统进行测试。让我知道你是否有运气。

于 2017-11-28T00:20:07.113 回答