我有一个Teradata表,其中有2个Varchar列,它们都具有如下所示的数据
颜色1:08/09/2017 01:03:20 PM
和其他类似内容
第2栏:09/09/2017 01:03:20 PM
我该如何处理日期差异
简单(col1- col2)不能帮助我。
我有一个Teradata表,其中有2个Varchar列,它们都具有如下所示的数据
颜色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)
。