从间隔“1:05:04”转换为 HH:MM 格式 Informix 11.50

Transform from interval " 1:05:04" to HH:MM format Informix 11.50

我有一个列 acdtime,它以 为单位提供通话时间。我需要将这些字段转换为 HH:MM 格式。

我的想法是先把秒数转换成间隔,参数是3904:

INTERVAL(0:0:0) HOUR TO second + acdtime UNITS second

我得到:

1:05:04

然后把这个结果转成char再做一个子串
这就是我卡住的地方。
任何的想法?

非常感谢

除非你有一个非常古老的 Informix 版本,否则你想要的是 TO_CHAR() 函数,但你需要一个 DATETIME 值作为基础,而不是间隔:

TO_CHAR(TODAY::DATETIME YEAR TO SECOND + 3904 UNITS SECOND, '%H:%M')

... 将产生:

(expression)  01:05

TODAY 转换为 DATETIME 会给你午夜,你可以在其中添加你的秒数。当然,此方法假设没有调用持续超过 23:59:59。如果不能排除这种可能性,您可能需要将表达式包装在检查 acdtime < 86400.

的 CASE 语句中

既然你想要HH:MM格式的时间,那么:

SELECT acdtime,
       EXTEND(TODAY::DATETIME YEAR TO SECOND + acdtime UNITS SECOND,
              HOUR TO MINUTE),
       EXTEND(TODAY::DATETIME YEAR TO SECOND +
              (TRUNC((acdtime + 59)/60)*60) UNITS SECOND,
              HOUR TO MINUTE)
  FROM TheAnonymousTable;

输出:

   0    00:00   00:00
  59    00:00   00:01
  60    00:01   00:01
3904    01:05   01:06

第一个表达式向下截断一分钟的小数部分,因此从 0 到 59 秒的时间映射到零分钟。更常见的是,'time on call' 被四舍五入到下一个更大的分钟;第二个表达式就是这样做的。请注意,如果呼叫持续时间为 86400 秒或更长(1 天或更长时间),这会遇到问题。这是可以解决的,但并非完全微不足道(而且绝对不简洁)。