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)
。
我有一个 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)
。