我试图找到teradata中2个时间戳之间的差异。我使用以下代码:
(date1-date2)day(4) to second as time_diff
这是错误:间隔字段溢出。可能是什么原因?还有其他方法来计算2个时间戳之间的差异吗?
当我使用它时:
case when(((date2+ INTERVAL '72' hour )-date1) day(4) to second)>0 then '<72 hrs'
然后我得到的错误是 DateTime或Interval的无效操作。 请帮忙
答案 0 :(得分:3)
DAY(4) TO SECOND(6)
的范围是-9999 23:59:59.999999
到9999 23:59:99.999999
。为了便于比较,您可以从1987-01-01 00:00:00
中减去CURRENT_TIMESTAMP(0)
,并且仍然在可接受的值范围内。
如果您的时间戳差异超过大约27。39年,则需要先考虑将值转换为DATE
,以确定两个值之间的天数。然后提取时间戳值并进行比较,同时考虑到可能会落在午夜的错误一侧。
答案 1 :(得分:1)
我认为这是因为你的日期彼此相距太远所以它们的间隔'第二天到第二天'会溢出。
在附件中我测试差异是否大于一年。如果是,很明显日期之间的间隔大于72小时。另外我继续小时间隔。年份已经或者需要8.8k所以HOUR(4)足够好了。
与20年差距的日期
SELECT CASE WHEN EXTRACT ( YEAR FROM ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2000-01-02 12:00:00'))YEAR(4) TO MONTH ) != 0 THEN '>72 hours'
WHEN EXTRACT ( YEAR FROM ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2000-01-02 12:00:00'))YEAR(4) TO MONTH ) = 0 THEN
CASE WHEN ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2000-01-02 12:00:00'))HOUR(4) < 72 THEN '< 72 hours' END
END
有1天差距的日期
SELECT CASE WHEN EXTRACT ( YEAR FROM ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2020-01-02 12:00:00'))YEAR(4) TO MONTH ) != 0 THEN '>72 hours'
WHEN EXTRACT ( YEAR FROM ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2020-01-02 12:00:00'))YEAR(4) TO MONTH ) = 0 THEN
CASE WHEN ((TIMESTAMP '2000-01-01 00:00:00'+ INTERVAL '72' hour ) - (TIMESTAMP '2020-01-02 12:00:00'))HOUR(4) < 72 THEN '< 72 hours' END
END
显然,在您的脚本中,您将替换TIMESTAMP的'YYYY-MM-DD