Sql 将值列表获取为数组
我有一个疑问:Sql 将值列表获取为数组,sql,arrays,postgresql,aggregate-functions,Sql,Arrays,Postgresql,Aggregate Functions,我有一个疑问: SELECT id FROM a select array_to_string( array( SELECT id FROM a where ... ), ',' ) id的类型为integer 我想以整数数组的形式获取结果:[2605326021],该结果将返回给一个对元素进行迭代的函数 根据我在手册中读到的内容,我编写了以下查询: SELECT id FROM a select array_to_string( array( SELECT id FROM a wher
SELECT id FROM a
select array_to_string( array( SELECT id FROM a where ... ), ',' )
id
的类型为integer
我想以整数数组的形式获取结果:[2605326021]
,该结果将返回给一个对元素进行迭代的函数
根据我在手册中读到的内容,我编写了以下查询:
SELECT id FROM a
select array_to_string( array( SELECT id FROM a where ... ), ',' )
问题是它返回一个字符串2605326021
,当我迭代结果时,它会:
... (id =2 or id =6 or id =0 or id =5 or id =3 or id =,
or id =2 or id =6 or id =0 or id =2 or id =1)
正如您所见,它将结果视为字符串而不是数组,每个字符都是一个元素
如何获得一个数组?是将字符串转换回数组的唯一解决方案吗?没有直接转换的方法吗?对于具有单个结果行的简单情况,a是最好的(最简单,最快)。实际上,您已经有了它,只需删除
数组\u to_string()
,它将数组转换为字符串(顾名思义):
对于具有多个结果行的情况,请查看聚合函数。例如:
SELECT b, array_agg(id) AS id_arr
FROM a
WHERE ...
GROUP BY b;
旁白:数组常量(数组的文本表示形式)的标准Postgres语法是
'{2605326021}
——带有大括号和单引号。根据上下文的不同,您可能需要也可能不需要添加显式强制转换:“{260532621}”::int[]
,或者您可以使用另一个数组构造函数,这次是基于整数常量而不是子查询:数组[2605326021]
[2605326021]
是介于两者之间的东西,两种方法都不起作用。旁白:除了“在元素上迭代”,通常还有一种更高级的纯SQL解决方案。这是有效的。是否有方法将元素返回为(260532621)
而不是{260532621}
?后来我使用了类似这样的查询:SELECT*FROM。。其中result中的id
其中result是我从该查询中获得的数组。它对{}
@John:也许你应该问另一个问题来演示你的确切用例。