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

时间:2016-09-26 18:06:11

标签: sql informix typeconverter

我有一个 acdtime 列,可让我在中拨打电话。我需要将这些字段转换为 HH:MM 格式。

我的想法是首先使用3904作为参数将秒转换为间隔:

  

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

我得到了:

  

1时05分04秒

然后将此结果转换为char,然后创建子字符串 这是我被困的地方 任何的想法?

非常感谢

2 个答案:

答案 0 :(得分:1)

除非你有一个非常古老的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语句中。

答案 1 :(得分:1)

由于你想要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秒的时间映射到零分钟。更常见的是,&#39;随时待命&#39;被收集到下一个更大的分钟;第二个表达式就是这样。请注意,如果呼叫持续时间为86400秒或更长(1天或更长),则会遇到问题。这是可以解决的,但它并非完全无关紧要(绝对不是简洁的)。