4

秒単位で測定された Duration を Decimal(18,0) から時間、分、秒にキャストする必要があります。

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 は両方とも、テーブル EVENT_TABLE で Decimal(18,0) と宣言されています

Teradata は次のように訴えています。

[エラー 3707]構文エラーです。'INTERVAL' キーワードと整数 8 の間に文字列または Unicode 文字リテラルのようなものが必要です

ここで使用する正しい構文またはアプローチは何ですか?


解決策: 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. 秒単位の既知の期間に 1 秒の長さの間隔を掛けます
  2. 結果の秒間隔を時、分、秒の間隔に変換します。
4

1 に答える 1

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
于 2013-05-11T16:43:10.273 に答える