Teradara: 将秒转换为小时、分钟和秒

4

我需要将以秒为单位、Decimal(18,0)格式的时间转换为小时、分钟和秒。

e.g.: 
8192 Seconds => 2:16:32 (Hours:Minutes:Seconds)
我发现(这里),如果秒数是字面字符串,我可以像下面这样做:
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_TABLE中,Event_Id和Duration都被声明为Decimal(18,0)。 Teradata报错: [Error 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. 将已知的秒数乘以一秒的间隔长度。
  2. 将得到的秒数间隔转换成小时,分钟和秒的间隔。

select INTERVAL '8192' SECOND 这是 ANSI SQL 的语法。 - user330315
@a_horse_with_no_name:这可能是ANSI,但它是否适用于列引用而不是文字字符串“8192”?(那就是问题所在...) - lexu
从foo中选择duration_col_in_seconds * interval '1' second。 - user330315
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

谢谢...请查看我对原问题的编辑,看看我的解释是否正确。 - lexu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,