如何在Node.js中从PostgreSQL查询结果数组提取通话时长数值?
提取PostgreSQL通话时长的分钟和秒数
你用Node.js连接PostgreSQL获取通话时长数据后,得到的是包含PostgresInterval对象的数组,需要提取其中的minutes和seconds数值,以下两种简便方法可以解决:
方法一:在Node.js中处理结果数组
直接遍历查询结果的rows数组,提取每个call_time对象里的分钟和秒数,同时处理字段不存在的情况(比如无分钟/秒的记录默认设为0):
修改代码如下:
execute() async function execute(){ await client.connect() console.log("Connected") const results = await client.query("SELECT call_time FROM call_history_view WHERE src_dn ='207' and call_history_view.segment_start_time > current_date - interval '2 days'") // 提取分钟和秒数 const processedData = results.rows.map(item => { return { minutes: item.call_time.minutes || 0, seconds: item.call_time.seconds || 0 } }) console.table(processedData) console.log(processedData) await client.end() console.log("Disconnected") }
处理后会得到结构化的数值数组:
[ { minutes: 0, seconds: 0 }, { minutes: 1, seconds: 31 }, { minutes: 1, seconds: 8 }, { minutes: 2, seconds: 5 }, { minutes: 0, seconds: 50 }, { minutes: 2, seconds: 3 } ]
方法二:直接在SQL查询中转换为数值(更高效)
无需在Node.js端处理对象,直接在PostgreSQL查询时用EXTRACT函数提取分钟和秒的数值,返回结果直接是数字类型:
修改SQL语句和代码:
execute() async function execute(){ await client.connect() console.log("Connected") // 修改SQL,直接提取分钟和秒的数值 const results = await client.query(` SELECT EXTRACT(MINUTE FROM call_time) AS minutes, EXTRACT(SECOND FROM call_time) AS seconds FROM call_history_view WHERE src_dn ='207' AND call_history_view.segment_start_time > current_date - interval '2 days' `) console.table(results.rows) console.log(results.rows) await client.end() console.log("Disconnected") }
这种方式返回的rows直接是包含数字字段的对象,无需额外处理:
[ { minutes: 0, seconds: 0 }, { minutes: 1, seconds: 31 }, { minutes: 1, seconds: 8 }, { minutes: 2, seconds: 5 }, { minutes: 0, seconds: 50 }, { minutes: 2, seconds: 3 } ]
推荐使用第二种方法,减少Node.js端的处理逻辑,直接从数据库获取目标数值。
内容的提问来源于stack exchange,提问作者TheIronKing
相关产品推荐
相关产品推荐

