
使用
array_agg_mult()此相关答案中定义的自定义聚合函数:
- 选择数据到Postgres数组中
您的预期结果是不可能的:
~~{{1},NULL,{abc}}~~必须是:
{{1},{NULL},{abc}}具有0或1个数组元素的简单情况对于只替换空数组的简单情况:您可以使用以下方法实现:
WITH t(arr) AS ( VALUES ('{1}'::text[]) ,('{}') ,('{abc}') )SELECt array_agg_mult(ARRAY[CASE WHEN arr = '{}' THEN '{NULL}' ELSE arr END])FROM t;n个元素的动态填充使用
array_fill()与NULL元件直到最大长度垫数组:
SELECt array_agg_mult(ARRAY[ arr || array_fill(NULL::text , ARRAY[max_elem - COALESCE(array_length(arr, 1), 0)]) ]) AS resultFROM t, (SELECt max(array_length(arr, 1)) AS max_elem FROM t) t1;
仍然仅适用于 一 维基本数组。
解释- 子查询
t1
计算基本一维数组的最大长度。 COALESCE(array_length(arr, 1), 0)
计算此行中数组的长度。COALESCE
默认为0
forNULL
。用生成长度差异的填充数组
array_fill()
。- 追加,要
arr
与||
- 像上面一样用进行汇总
array_agg_mult()
。
SQL提琴。 展示 一切 。
SQL Fiddle中的输出具有误导性,因此我将结果投射到此处的文本。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)