首页 > 解决方案 > 动态增加数组的大小

问题描述

我想在 for 循环中增加数组的大小。目前我正在手动进行:

m_array varchar array default array[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0]; 

我想通过检查列(select count(*) from ...)的长度来增加它,并将这个值设置为数组的大小。或者有另一种方法可以在 PostgreSQL 中解决这个问题吗?

编辑
数组中的值应该在开始时为 0,它在另一个循环中填充,循环后数组值设置回 0。

编辑二

array_fill(0,'{28}')为我工作。还有一种方法可以将 {28} 替换为将在声明后定义的变量。用例:我在映射函数中使用数组。每个数组元素都代表一个产品,最后array_to_string我得到一个一维二进制代码。

编辑三

array_fill(0,array[variable])为我工作!感谢你们!

标签: sqlarrayspostgresql

解决方案


如果您需要0预定义数组位置的实际值,请考虑array_fill().
手册:

返回一个由给定值的副本填充的数组,其维度由第二个参数指定。可选的第三个参数为每个维度提供下限值(默认为 all 1)。

test=> SELECT array_fill(0, '{28}');
                        array_fill                         
-----------------------------------------------------------
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
(1 row)

(但我怀疑对数组的工作方式和/或何时以及如何最好地使用它们存在误解。)


推荐阅读