有没有办法从pgSQL中删除数组中的值?或者更准确地说,弹出最后一个值?从this list来看,答案似乎是否定的。
,我可以使用额外的索引指针获得我想要的结果,但这有点麻烦。答案 0 :(得分:76)
在版本9.3及更高版本中,您可以执行以下操作:
update users set flags = array_remove(flags, 'active')
答案 1 :(得分:19)
删除最后一个值的最简单方法:
array1 = array[1,2,3]
array1 = ( select array1[1:array_upper(array1, 1) - 1] )
答案 2 :(得分:10)
不,我认为你不能。至少不是没有写出像丑陋的东西:
SELECT ARRAY (
SELECT UNNEST(yourarray) LIMIT (
SELECT array_upper(yourarray, 1) - 1
)
)
答案 3 :(得分:9)
有一种简单的方法可以从PLAIN SQL中删除数组中的值:
SELECT unnest('{5,NULL,6}'::INT[]) EXCEPT SELECT NULL
它将从数组中删除所有NULL值。结果将是:
#| integer |
------------
1| 5 |
2| 6 |
答案 4 :(得分:8)
我不确定你的背景,但这应该给你一些工作:
CREATE TABLE test (x INT[]);
INSERT INTO test VALUES ('{1,2,3,4,5}');
SELECT x AS array_pre_pop,
x[array_lower(x,1) : array_upper(x,1)-1] AS array_post_pop,
x[array_upper(x,1)] AS popped_value
FROM test;
array_pre_pop | array_post_pop | popped_value
---------------+----------------+--------------
{1,2,3,4,5} | {1,2,3,4} | 5
答案 5 :(得分:5)
这是我用于整数[]数组
的函数CREATE OR REPLACE FUNCTION array_remove_item (array_in INTEGER[], item INTEGER)
RETURNS INTEGER[]
LANGUAGE SQL
AS $$
SELECT ARRAY(
SELECT DISTINCT $1[s.i] AS "foo"
FROM GENERATE_SERIES(ARRAY_LOWER($1,1), ARRAY_UPPER($1,1)) AS s(i)
WHERE $2 != $1[s.i]
ORDER BY foo
);
$$;
这显然适用于整数数组,但可以针对ANYARRAY ANYELEMENT进行修改
=> select array_remove_item(array[1,2,3,4,5], 3);
-[ RECORD 1 ]-----+----------
array_remove_item | {1,2,4,5}
答案 6 :(得分:3)
我在9.2上运行,我可以执行此操作:
update tablename set arrcolumn=arrcolumn[1:array_length(arrcolumn)-1];
或者你可以用同样的东西移开前面的元素:
update tablename set arrcolumn=arrcolumn[2:array_length(arrcolumn)];
细心的程序员 - 由于某些原因,科学仍然不知道,pgsql数组是1索引而不是0索引。
答案 7 :(得分:2)
我已经创建了一个array_pop函数,因此您可以从数组中删除具有已知值的元素。
CREATE OR REPLACE FUNCTION array_pop(a anyarray, element character varying)
RETURNS anyarray
LANGUAGE plpgsql
AS $function$
DECLARE
result a%TYPE;
BEGIN
SELECT ARRAY(
SELECT b.e FROM (SELECT unnest(a)) AS b(e) WHERE b.e <> element) INTO result;
RETURN result;
END;
$function$
答案 8 :(得分:1)
试试这个:
update table_name set column_name=column_name[1:array_upper(column_name, 1)-1];
答案 9 :(得分:-1)
我的所有类型数组的功能。
外部功能:
CREATE OR REPLACE FUNCTION "outer_array"(anyarray, anyarray) RETURNS anyarray AS $$
SELECT
"new"."item"
FROM (
SELECT
ARRAY(
SELECT
"arr"."value"
FROM (
SELECT
generate_series(1, array_length($1, 1)) AS "i",
unnest($1) AS "value"
) "arr"
WHERE
"arr"."value" <> ALL ($2)
ORDER BY
"arr"."i"
) AS "item"
) "new"
$$
LANGUAGE sql
IMMUTABLE
RETURNS NULL ON NULL INPUT
;
内在功能:
CREATE OR REPLACE FUNCTION "inner_array"(anyarray, anyarray) RETURNS anyarray AS $$
SELECT
"new"."item"
FROM (
SELECT
ARRAY(
SELECT
"arr"."value"
FROM (
SELECT
generate_series(1, array_length($1, 1)) AS "i",
unnest($1) AS "value"
) "arr"
WHERE
"arr"."value" = ANY ($2)
ORDER BY
"arr"."i"
) AS "item"
) "new"
$$
LANGUAGE sql
IMMUTABLE
RETURNS NULL ON NULL INPUT
;