Teradata中的日期差异

问题描述 投票:0回答:1

我有一个Teradata表,其中有2个Varchar列,它们都具有如下所示的数据

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

我该如何处理日期差异

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

teradata
1个回答
0
投票

首先,如果您对此表或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类型存储在表上,这样您就可以可以在您的SQL中执行INTERVAL(my_period_column) DAY(4)

© www.soinside.com 2019 - 2024. All rights reserved.