2014-03-19 190 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