2014-03-19 197 views
0

的,我试图找到Teradata的2个时间戳之间的差异。我使用下面的代码:减法时间戳的Teradata

(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' 

然后我得到的错误是日期时间或间隔操作无效。 请帮忙

回答

3

DAY(4) TO SECOND(6)的范围是-9999 23:59:59.9999999999 23:59:99.999999。为了比较起见,您可以从CURRENT_TIMESTAMP(0)中减去1987-01-01 00:00:00,并仍然在可接受的值范围内。

如果您的时间戳差异超过大约27.39年,则需要先考虑将值先转换为DATE以确定两个值之间的天数。然后提取时间戳值并对其进行比较,同时考虑到可能落在午夜的错误一侧。

1

我认为这是因为你的日期距彼此太远,所以他们的间隔'第(4)秒到第二'溢出。

在附加的脚本中我测试差异是否大于一年。如果是,很明显,日期之间的时间间隔大于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 

显然,在你的脚本,你将取代时间戳“YYYY-MM-DD