如何从函数返回(bigint,双精度)数组以将其转换为json数组
Posted
技术标签:
【中文标题】如何从函数返回(bigint,双精度)数组以将其转换为json数组【英文标题】:how to return an array of (bigint, double precision) from a function in order to convert it to json array 【发布时间】:2016-11-18 15:23:43 【问题描述】:我需要的是一个字符串/文本兼容 json 的数组,如下所示:
[
[1421420100, 14214201003487],
[1421420101, 14214201003487],
[1421420109, 14214201003487]
...
]
为了将其从服务器返回给客户端,无需进一步说明。
我有一个查询返回两个字段的表的函数,但我想返回一个数组数组以便调用该函数,然后调用array_to_json
。然后,我想把它转换成文本/字符串。
这可能吗?数组数组可以有两种不同的类型吗?
【问题讨论】:
为什么不使用对象数组? [type1,type2] 因为预期的输出是我发布的,但如果不可能,我会这样做 数组数组可以有两种不同的类型吗?是的,它可以 你能给我指路吗?我确信每个元素都应该具有相同的类型。允许:1,4, 5,9
,不允许1,'4', 5,'9'
。也许我错了?根据this question没有
@Ali7091:Postgres 数组只能包含相同类型的元素。
【参考方案1】:
Postgres 数组不能保存不同类型的元素。
但您可以改为返回 复合类型数组 (bigint, double precision)
。但是,该类型需要在系统中注册。使用显式 CREATE TYPE
语句或隐式作为表或视图的行类型。
例子:
CREATE TYPE int8_float AS (b bigint, f float);
CREATE OR REPLACE FUNCTION f_combo_arr()
RETURNS int8_float[] AS
$func$
SELECT ARRAY(SELECT (int8_col1, float_col)::int8_float FROM tbl);
$func$ LANGUAGE sql;
呼叫:
SELECT f_combo_arr();
float
是 Postgres 中 double precision
的别名。
可能有更聪明的解决方案,比如直接从函数返回数据类型json
。
相关:
Return type for function with array_agg() PostgreSQL - best way to return an array of key-value pairs【讨论】:
不错的“标准”解决方案!如果返回一个包含两列的 TABLE 呢?你觉得这两个哪个效率更高?我正在考虑返回它,然后用光标遍历它 @Bertuz:我更喜欢有两列的表函数。可能对大集合更有效。以上是关于如何从函数返回(bigint,双精度)数组以将其转换为json数组的主要内容,如果未能解决你的问题,请参考以下文章
如何优化 spark 函数以将双精度值舍入到小数点后 2 位?
如何从 SQL where 子句创建一个 JavaScript 函数,以将其作为谓词传递给 JavaScript 数组的过滤函数?