PostgreSQL按财年分组并将秒数转换为时分秒的SQL实现需求
PostgreSQL 秒数转天时分秒及财年汇总解决方案
任务1:将每月等待秒数转换为「天, 时, 分, 秒」格式
通过数学计算拆分秒数,再拼接成目标格式:
SELECT "Fiscal Year", "Month", CONCAT( FLOOR("Time" / 86400), ' days, ', FLOOR(("Time" % 86400) / 3600), ' hours, ', FLOOR((("Time" % 86400) % 3600) / 60), ' minutes, ', (("Time" % 86400) % 3600) % 60, ' seconds' ) AS "Monthly Wait Time" FROM your_table_name;
说明:
86400= 24小时×60分钟×60秒(一天的总秒数),3600是一小时的秒数,60是一分钟的秒数FLOOR()用于取整数部分,%是取余数运算符,用来拆分剩余的秒数- 列名带空格/特殊字符,必须用双引号
""包裹,PostgreSQL才会识别
任务2:按财年汇总等待时长并转换格式
先按财年汇总总秒数,再对总秒数做格式转换,同时过滤2007-2022年的数据:
SELECT "Fiscal Year", CONCAT( FLOOR(total_seconds / 86400), ' days, ', FLOOR((total_seconds % 86400) / 3600), ' hours, ', FLOOR((total_seconds % 86400 % 3600) / 60), ' minutes, ', total_seconds % 86400 % 3600 % 60, ' seconds' ) AS "Total Time" FROM ( -- 子查询:按财年汇总总秒数 SELECT "Fiscal Year", SUM("Time") AS total_seconds FROM your_table_name WHERE "Fiscal Year" BETWEEN 2007 AND 2022 GROUP BY "Fiscal Year" ) AS fiscal_totals ORDER BY "Fiscal Year";
说明:
- 子查询
fiscal_totals负责计算每个财年的总等待秒数 - 外层查询把总秒数转成要求的「天, 时, 分, 秒」格式
ORDER BY "Fiscal Year"保证结果按财年升序排列
新手注意事项:
- 把代码中的
your_table_name替换成你实际的表名 - 确保列名和你表中的完全一致(包括空格和括号),否则会报错
- 如果你的「Fiscal Year」列是正确对应10月1日至次年9月30日的财年,直接用上述代码即可
内容的提问来源于stack exchange,提问作者paisley10
相关产品推荐
相关产品推荐

