PostgreSQL中拆分interval类型计算总秒数报错求助
PostgreSQL中把interval类型转成总秒数的正确方法
你用的STRING_SPLIT是SQL Server专属函数,PostgreSQL里根本没有这玩意儿,这就是你报错的主要原因。另外,tlm.data_qa_tele_freq()返回的是记录集,不能直接塞给字符串拆分函数当参数。
给你两种靠谱的实现方式:
方法一:用内置函数直接提取计算(强烈推荐)
PostgreSQL自带extract()函数,能直接从interval里抠出小时、分钟、秒,不用折腾字符串拆分,既简单又高效:
SELECT extract(hour FROM avg_freq) * 3600 + extract(minute FROM avg_freq) * 60 + extract(second FROM avg_freq) AS total_seconds FROM tlm.data_qa_tele_freq(183, 1001, now()::timestamp - interval '0.5 day', now()::timestamp);
方法二:字符串拆分实现(仅作参考,不推荐)
要是你非得拆字符串,用PostgreSQL的split_part()函数就行,先把interval转成文本,再按:拆分取对应部分:
SELECT (split_part(avg_freq::text, ':', 1)::int * 3600) + (split_part(avg_freq::text, ':', 2)::int * 60) + split_part(avg_freq::text, ':', 3)::numeric AS total_seconds FROM tlm.data_qa_tele_freq(183, 1001, now()::timestamp - interval '0.5 day', now()::timestamp);
补充:如果你的interval结果里包含天或者更大的单位,记得把天数转成秒(extract(day FROM avg_freq)*86400)加到总秒数里,按你说的返回格式是00:00:00,应该不用考虑这个情况。
内容的提问来源于stack exchange,提问作者JAOdev
相关产品推荐
相关产品推荐

