如何从函数返回(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 数组的过滤函数?

如何将其转置为数组?

如何从 PHP 中的双精度数组中计算第 n 个百分位数?

我将向量作为双精度传递给函数,但视觉工作室将其称为无符号整数

PInvoke:返回的双精度数组有问题吗?