获取值列表作为数组
Getting list of values as array
我有这个查询:
SELECT id FROM a
id
的类型是 integer
我想得到整数数组的结果:[26053,26021]
,这个结果返回给一个迭代元素的函数。
根据我在手册中阅读的内容,我编写了以下查询:
select array_to_string( array( SELECT id FROM a where ... ), ',' )
问题是它 returns 我是一个字符串 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)
如您所见,它将结果视为字符串而不是数组,每个字符都是一个元素。
我如何只得到一个数组?将字符串转换回数组的唯一解决方案是什么?没有办法直接转换吗?
对于只有一个结果行的简单情况,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]
介于两者之间,这两种方式都行不通。
我有这个查询:
SELECT id FROM a
id
的类型是 integer
我想得到整数数组的结果:[26053,26021]
,这个结果返回给一个迭代元素的函数。
根据我在手册中阅读的内容,我编写了以下查询:
select array_to_string( array( SELECT id FROM a where ... ), ',' )
问题是它 returns 我是一个字符串 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)
如您所见,它将结果视为字符串而不是数组,每个字符都是一个元素。
我如何只得到一个数组?将字符串转换回数组的唯一解决方案是什么?没有办法直接转换吗?
对于只有一个结果行的简单情况,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]
介于两者之间,这两种方式都行不通。