首页 > 解决方案 > Teradata 中的日期差异

问题描述

我有一个 Teradata 表,它有 2 个 Varchar 列,它们都有如下数据

Col 1 :08/09/2017 01:03:20 PM和其他一个
Col 2 :09/09/2017 01:03:20 PM

我该怎么做日期差异

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

标签: teradata

解决方案


首先,如果您对此表或 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)

另一种选择是(在转换为时间戳之后),将它们推入 aPERIOD()并找到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在加载时将类型存储在表上可能是个好主意,这样您就可以INTERVAL(my_period_column) DAY(4)在您的SQL。


推荐阅读