将小数分钟转换为 Minutes:Seconds?

Convert decimal minutes into Minutes:Seconds?

任何人都知道是否有将十进制分钟转换为 Minutes:Seconds 的函数 雪花?

例如:

input: 8.5 (as in 8.5 minutes) 
output: 8:30 (as in 8 minutes 30 seconds)

来源:https://twitter.com/jasongrahn/status/1420768503133401095

只需从部分构建日期,并将小数点与整数分钟分开。 为方便起见,您可以创建一个 SQL UDF:

create function from_decimal_minutes(minutes float)
returns time
as $$
    time_from_parts(0, floor(minutes), 60*(minutes-floor(minutes)))
$$
;

select from_decimal_minutes(8.5);
-- 00:08:30
;

使用 TIMEADD 添加自午夜以来的秒数:

SELECT TIMEADD(second, 8.5 * 60, '00:00'::TIME) AS res;
                       --arg

输出:

RES
00:08:30

将已经提供的两个优秀解决方案放在一起:

SELECT TIME_FROM_PARTS(0,0,8.5*60)

这很好,因为它是直的 SQL - UDF's may not perform as quick

TIME_FROM_PARTS 不仅可以传递秒,还可以传递分钟、纳秒等

如果超过 1 天就切换到 TIMESTAMP_FROM_PARTS

下面我用 510 万纳秒返回 1 个月 28 天 40 分钟。这证明了可以始终优雅地使用的内置函数的可扩展性。