从间隔“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 天或更长时间),这会遇到问题。这是可以解决的,但并非完全微不足道(而且绝对不简洁)。
我有一个列 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
.
既然你想要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 天或更长时间),这会遇到问题。这是可以解决的,但并非完全微不足道(而且绝对不简洁)。