我有一个Teradata表,其中有2个Varchar列,它们都具有如下所示的数据
Col 1:08/09/2017 01:03:20 PM
和类似的其他一个第2列:09/09/2017 01:03:20 PM
我该如何处理日期差异
简单(col1- col2)对我没有帮助。
首先,如果您对此表或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)
。