我有这个问题:
SELECT id FROM a
id
的类型为integer
我希望将结果作为整数数组:[26053,26021]
,将此结果返回给迭代元素的函数。
根据我在手册中阅读的内容,我写了这个查询:
select array_to_string( array( SELECT id FROM a where ... ), ',' )
问题是它返回一个字符串26053,26021
,当我迭代它的结果时:
... (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)
正如您所看到的,它将结果视为字符串而非数组,每个字符都是一个元素。
我如何获得一个阵列?是将字符串转换回数组的唯一解决方案吗?有没有办法直接转换它?
答案 0 :(得分:2)
对于单个结果行的简单情况,array constructor最好(最简单,最快)。你实际上已经拥有它,只需删除array_to_string()
,它将数组转换为字符串(顾名思义):
SELECT ARRAY(SELECT id FROM a WHERE ... ) AS id_arr;
对于具有多个结果行的情况,请查看聚合函数array_agg()
。例如:
SELECT b, array_agg(id) AS id_arr
FROM a
WHERE ...
GROUP BY b;
除了:
数组常量(数组的文本表示)的标准Postgres语法是'{26053,26021}'
- 带花括号和单引号。根据上下文,您可能需要也可能不需要添加显式转换:'{26053,26021}'::int[]
或者您可以使用另一个数组构造函数,这次基于整数常量而不是子查询:ARRAY[26053,26021]
。
[26053,26021]
介于两者之间,无论如何都无法发挥作用。