2013-05-11 38 views
4

我需要施加持續時間,以秒爲單位,十進制(18,0)到小時,分鐘和秒。Teradara:鑄造秒到小時,分鐘和秒

e.g.: 
8192 Seconds => 2:16:32 (Hours:Minutes:Seconds) 

我發現(here),我可以做到這一點,如果在秒數文本字符串,像這樣:

SELECT CAST(INTERVAL '8192' SECOND AS INTERVAL HOUR TO SECOND) 

但是當我嘗試:

SELECT Event_Id 
    , CAST(INTERVAL Duration SECOND AS INTERVAL HOUR TO SECOND) 
    FROM EVENT_TABLE 
WHERE <some conditions> 

Event_Id和Duration均在表格中聲明爲十進制(18,0)EVENT_TABLE

Teradata的抱怨:

[錯誤3707]語法錯誤,預期類似的字符串或Unicode字符 '間隔' 的關鍵字和整數之間字面8

什麼是正確的語法或方法在這裏使用?


SOLUTION:基於BellevueBob的交

SELECT Event_Id 
    , CAST(
      Duration SECOND * INTERVAL '0000:01' MINUTE TO SECOND /* 1 */ 
      AS INTERVAL HOUR TO SECOND        /* 2 */ 
      ) 
    FROM EVENT_TABLE 
WHERE <some conditions> 

說明:

  1. 乘以秒爲已知的持續時間與一個第二長度的間隔
  2. 轉換導致進入一個英寸的秒間隔幾小時,幾分鐘和幾秒鐘的時間。
+0

什麼'選擇INTERVAL '8192' 秒'(這將是ANSI SQL) – 2013-05-11 10:00:53

+0

@a_horse_with_no_name:可能是ANSI,但確實它使用列引用而不是字符串'8192'? (這__was__的問題......) – lexu 2013-05-19 16:32:36

+0

那麼:'選擇duration_col_in_seconds *間隔從foo'1'秒' – 2013-05-19 16:56:53

回答

3

從你發現了同樣的解決方案,試試這個:

select CAST(duration * INTERVAL '0000:01' MINUTE TO SECOND 
      AS INTERVAL HOUR TO SECOND) 
from (
    select cast(8192 as decimal(18,0)) as duration 
    ) x 
+0

謝謝...請檢查我的編輯原始問題,看看我的解釋是否正確。 – lexu 2013-05-13 09:17:34