减去时间戳teradata

时间:2014-03-19 08:54:58

标签: timestamp teradata

我试图找到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的无效操作。 请帮忙

2 个答案:

答案 0 :(得分:3)

DAY(4) TO SECOND(6)的范围是-9999 23:59:59.9999999999 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