给定PostgreSQL 9.6中的此表:
CREATE TABLE test_table (
id int PRIMARY KEY
, test_array text[]
);
与像这样的行:
INSERT INTO test_table (id, test_array)
VALUES (1 , '{A,A,A,B,B,B}');
如何删除一个单一的“ B”值?
我不能使用:
UPDATE test_table
SET test_array = array_remove(test_array, 'B')
WHERE id = 1;
因为它会删除 所有 值“ B”的元素。我只是想删除一个元素(例如,第一个)。
有任何想法吗?
根据我在dba.SE上找到的旧答案,并充分利用了它:
您可能会更进一步:
CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';
此函数将要删除的元素的值作为第二个参数。相应地使用多态伪类型anyelement
使它适用于任何数组类型。
那么UPDATE
简单的是:
UPDATE test_table
SET test_array = f_array_remove_elem1(test_array, 'B')
WHERE id = 1;
db
<>在这里拨弄
当使用我的原始函数f_array_remove_elem()
获取索引位置而不是元素值时,您可以不使用子查询:
UPDATE test_table
SET test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE id = 1;
甚至可能比我的新功能快一点。
并请注意,我的旧答案底部的较简单版本适用于Postgres 9.6。
问题内容: 说我有这些二维数组A和B。 如何从B中删除A中的元素。(集合论中的补语:AB) 更准确地说,我想做这样的事情。 问题答案: 基于this solution对,这里是用更少的内存占用与NumPy基础的解决方案,并与大型阵列工作时,可能是有益的- 样品运行- 在大型阵列上的运行时测试- 具有基础解决方案的时间- 基于更少内存占用量的定时解决方案- 进一步提升性能 通过将每一行视为索引元组来
我想从数组中删除一个特定的数字 这是在创造0-7的数字,但我不需要0,我需要1-7的数值
问题内容: 如何使用phpMyAdmin在MySQL表的列上删除“唯一键约束”? 问题答案: 唯一约束也是索引。 首先使用来查找索引的名称。索引的名称存储在该查询结果中调用的列中。 然后,您可以使用DROP INDEX: 或ALTER TABLE语法:
问题内容: 我有以下数组。 我想删除最后一个元素,即2。 我用过,但不会删除值。 问题答案: 使用拼接(索引,多个)
给定下面的代码: HTML: 断续器 我必须使用此代码才能删除元素吗?它似乎太冗长了。
问题内容: 我有两个数组 我想从array1中删除array2的元素 问题答案: 最简单的方法是将两个数组都转换为集合,从第一个数组中减去第二个数组,将结果转换为数组,然后将其分配回: 请注意,您的代码不是有效的Swift-您可以使用类型推断来声明和初始化两个数组,如下所示: