我需要将以秒为单位、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>
说明:
- 将已知的秒数乘以一秒的间隔长度。
- 将得到的秒数间隔转换成小时,分钟和秒的间隔。
select INTERVAL '8192' SECOND这是 ANSI SQL 的语法。 - user330315