4

我需要将持续时间(以秒为单位)、十进制(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. 以秒为单位的已知持续时间乘以一秒长度的间隔
  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 回答