我有一个 acdtime 列,可让我在秒中拨打电话。我需要将这些字段转换为 HH:MM 格式。
我的想法是首先使用3904作为参数将秒转换为间隔:
INTERVAL(0:0:0)HOUR TO second + acdtime UNITS second
我得到了:
1时05分04秒
然后将此结果转换为char,然后创建子字符串 这是我被困的地方 任何的想法?
非常感谢
答案 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天或更长),则会遇到问题。这是可以解决的,但它并非完全无关紧要(绝对不是简洁的)。