列持续时间以秒为单位提供联系持续时间(整数 8(,并且可以比天长。我使用此解决方案:
select ((INTERVAL(0 0:0:0) DAY TO SECOND) + callend UNITS SECOND) as dur from callrecord
这会产生如下结果:
0 00:08:17
13 19:10:12
想法是省略有 0 天的天数:
00:08:17
13 19:10:12
我和TO_CHAR玩得不成功。 这里宣布了一些想法,但我仍然找不到解决方案。
我认为您需要将值转换为字符串。 我的 Informix 语法有点弱,但像这样:
select (case when called < 24 * 60 * 60
then to_char((interval(0 0:0:0) day to second) + callend units second), '%D %H:%M:%S')
else to_char((interval(0:0:0) hour to second) + callend units second), '%H:%M:%S')
end) as dur
from callrecord;
好吧,我发现这段代码产生了理想的结果:
select CASE
WHEN TRUNC(cr.callend/86400)=1 THEN TRUNC(cr.callend/86400)||' day '
WHEN TRUNC(cr.callend/86400)>1 THEN TRUNC(cr.callend/86400)||' days '
ELSE ''
END||TRUNC(MOD(cr.callend,86400)/3600)||':'
||TRUNC(MOD(MOD(cr.callend,86400),3600)/60)
||':'||MOD(MOD(MOD(cr.callend,86400),3600),60) as dur
from callrecord cr
虽然看起来不是很优雅,但此 SQL 的运行速度甚至比初始示例中的 SQL 还要快。