ogg*_*ggy 29 arrays postgresql
有没有办法从pgSQL中的数组中删除一个值?或者更准确地说,弹出最后一个值?从这个列表来看,答案似乎是否定的.我可以使用额外的索引指针获得我想要的结果,但它有点麻烦.
Joh*_*han 78
在9.3及以上版本中,您可以:
update users set flags = array_remove(flags, 'active')
Run Code Online (Sandbox Code Playgroud)
小智 20
删除最后一个值的最简单方法:
array1 = array[1,2,3]
array1 = ( select array1[1:array_upper(array1, 1) - 1] )
Run Code Online (Sandbox Code Playgroud)
Mag*_*der 10
不,我认为你不能.至少不是没有写出像丑陋的东西:
SELECT ARRAY (
SELECT UNNEST(yourarray) LIMIT (
SELECT array_upper(yourarray, 1) - 1
)
)
Run Code Online (Sandbox Code Playgroud)
我不确定你的背景,但这应该给你一些工作:
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
Run Code Online (Sandbox Code Playgroud)
小智 9
有一种简单的方法可以从PLAIN SQL中删除数组中的值:
SELECT unnest('{5,NULL,6}'::INT[]) EXCEPT SELECT NULL
Run Code Online (Sandbox Code Playgroud)
它将从数组中删除所有NULL值.结果将是:
#| integer |
------------
1| 5 |
2| 6 |
Run Code Online (Sandbox Code Playgroud)
这是我用于整数[]数组的函数
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
);
$$;
Run Code Online (Sandbox Code Playgroud)
这显然适用于整数数组,但可以针对ANYARRAY ANYELEMENT进行修改
=> select array_remove_item(array[1,2,3,4,5], 3);
-[ RECORD 1 ]-----+----------
array_remove_item | {1,2,4,5}
Run Code Online (Sandbox Code Playgroud)