Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将值列表获取为数组_Sql_Arrays_Postgresql_Aggregate Functions - Fatal编程技术网

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:也许你应该问另一个问题来演示你的确切用例。