Sql 将数组\ U agg输出转换为数组而不是字符串
我正在使用Sql 将数组\ U agg输出转换为数组而不是字符串,sql,node.js,postgresql,knex.js,Sql,Node.js,Postgresql,Knex.js,我正在使用array\u agg将值分组到一个数组中。第行的输出为: row: anonymous { values: '{(1),(2)}' } 然后我试着在Node中遍历结果 row.values.forEach(…但它表示values.forEach不是函数,因为typeof row.values是字符串 我使用的是array\u agg,那么为什么输出是字符串,如何将其转换为数组呢?如果数组中需要整数,可以使用regex并通过(\d+)的匹配循环 另一种方法是使用array\u to\
array\u agg
将值分组到一个数组中。第行的输出为:
row: anonymous { values: '{(1),(2)}' }
然后我试着在Node中遍历结果
row.values.forEach(…
但它表示values.forEach
不是函数,因为typeof row.values
是字符串
我使用的是array\u agg,那么为什么输出是字符串,如何将其转换为数组呢?如果数组中需要整数,可以使用regex并通过
(\d+)
的匹配循环
另一种方法是使用array\u to\u string
并使用内容中未出现的值将其连接起来,换行符\n
例如:array\u to\u string(一些\u array\u内容,E'\n')
,然后将其拆分
一旦您以某种方式将其放入数组中,forEach
将起作用
另外,我相信Sequelize可以处理数组:可以使用以下方法将数组转换为一组行:
我也遇到了这个问题,而unnest不是一个选项,因为需要返回固定数量的行,我不能保证我的内容不会包含
、
或括号,这使得regex解决方案具有挑战性
我发现最好的解决方案是使用
json\u agg
而不是array\u agg
(请参阅)这以JSON格式返回结果,node自动将其解释为javascript对象,这样您就可以使用.forEach
,而无需任何转换。Postgres wire协议将几乎所有内容都表示为可打印字符串;将其转换为本机数据类型取决于客户端驱动程序(int、float、boolean等)。数组相对较少,因此大多数驱动程序都没有内置的处理方法。不幸的是,字符串格式很难解析;一个解决方法是使用array\u to\u json
来获得更容易解析的内容。(没有回答,因为我不知道这个驱动程序的具体情况。)
create temp table t (name text);
insert into t values ('name1'),('name2'),('name3'),('name4');
select unnest(array_agg(name)) as aname from t
+-------+
| aname |
+-------+
| name1 |
+-------+
| name2 |
+-------+
| name3 |
+-------+
| name4 |
+-------+