PostgreSQL如何将数值格式化为带h/min标识的自定义时间格式
实现方案
你的time列存储的是总分钟数值,不需要依赖原生标准时间格式化函数,直接通过数值拆分+字符串拼接就能实现需求,核心逻辑分三步:
- 计算小时部分:总分钟数整除60,得到整小时数
- 计算剩余分钟部分:总分钟数对60取模,得到扣除整小时后剩下的分钟数
- 按判断规则拼接结果:
- 整小时数为0时,直接输出
{分钟数}min - 剩余分钟数为0时,直接输出
{小时数}h - 两个值都不为0时,输出
{小时数}h {剩余分钟数}min
- 整小时数为0时,直接输出
不同数据库的实现代码
MySQL
SELECT CASE WHEN time DIV 60 = 0 THEN CONCAT(time, 'min') WHEN time MOD 60 = 0 THEN CONCAT(time DIV 60, 'h') ELSE CONCAT(time DIV 60, 'h ', time MOD 60, 'min') END AS formatted_time FROM your_table;
- 传入值为70时:70整除60得1,取模得10,输出
1h 10min - 传入值为50时:50整除60得0,输出
50min - 传入值为120时:120整除60得2,取模得0,输出
2h
PostgreSQL
SELECT CASE WHEN time / 60 = 0 THEN time || 'min' WHEN time % 60 = 0 THEN (time / 60) || 'h' ELSE (time / 60) || 'h ' || (time % 60) || 'min' END AS formatted_time FROM your_table;
如果你的time列存储的是秒数或其他时间单位,只需要把计算逻辑里的除数60换成对应单位的换算值即可,整体判断和拼接逻辑通用。
内容的提问来源于stack exchange,提问作者Deadjim
相关产品推荐
相关产品推荐

