Teradata 中的日期差异

Date Difference in Teradata

我有一个 Teradata table,它有 2 个 Varchar 列,它们都有类似下面的数据

第 1 列:08/09/2017 01:03:20 PM 和其他类似
第 2 列:09/09/2017 01:03:20 PM

如何做日期差异

简单 (col1-col2) 对我没有帮助。

首先,如果您对这个 table 或 ETL 有任何控制权,建议您不要将时间戳存储为 varchar,因为无论它们看起来多么像,您都不能减去两个字符串数字或日期。

您需要做的是将这两列转换为 TIMESTAMP,指定它们当前所在的 FORMAT。转换后,您可以减去它们以获得 INTERVAL 类型表示日期之间的天数。

SELECT (CAST('09/09/2017 01:03:20 PM' AS TIMESTAMP FORMAT 'mm/dd/yyyybhh:mi:ssbt') - CAST('08/09/2017 01:03:20 PM' AS TIMESTAMP FORMAT 'mm/dd/yyyybhh:mi:ssbt')) DAY(4)

另一种选择是(转换为时间戳后),将它们推入 PERIOD() 并找到那个时期的 INTERVAL()

SELECT INTERVAL(PERIOD(CAST('08/09/2017 01:03:20 PM' AS TIMESTAMP FORMAT 'mm/dd/yyyybhh:mi:ssbt'), NEXT(CAST('09/09/2017 01:03:20 PM' AS TIMESTAMP FORMAT 'mm/dd/yyyybhh:mi:ssbt')))) DAY(4) 

第一个选项的性能会更好,因为对数据的干扰较少,但如果您经常这样做,最好将 PERIOD 类型存储在 table 当你加载它时,你可以在你的 SQL 中做 INTERVAL(my_period_column) DAY(4)