簡體   English   中英

使用開始和結束索引從數組中刪除n個元素

[英]Remove n elements from array using start and end index

我在Postgres數據庫中有下表:

CREATE TABLE test(
  id SERIAL NOT NULL,
  arr int[] NOT NULL
)

數組包含約500k元素。

我想知道是否存在一種有效的方法來更新arr列,方法是從給定開始索引和結束索引的數組中刪除一組元素,或者僅刪除要刪除的“ n個第一元素”的數量。

您可以使用切片(請參見8.15.3。訪問數組 )。

create table example 
as select array[1,2,3,4,5,6,7,8] arr;

刪除前三個元素:

select arr[4:8]
from example;

     arr     
-------------
 {4,5,6,7,8}
(1 row)

從4到5刪除元素:

select arr[1:3] || arr[6:8] as arr
from example;

      arr      
---------------
 {1,2,3,6,7,8}
(1 row)

如果數組的長度未知,則刪除前5個元素:

select arr[6:array_length(arr,1)]
from example;

   arr   
---------
 {6,7,8}
(1 row)

您可以訪問單個元素或元素范圍:

例如,如果要刪除元素5至8,則可以執行以下操作:

select arr[1:4]||arr[9:]
from test;

或作為更新:

update test
   set arr = arr[1:4]||arr[9:];

要刪除“前n個元素”,只需使用n + 1個元素之后的切片,例如,刪除前5個元素:

select arr[6:]
from test;

語法arr[6:]需要Postgres 9.6或更高版本,對於早期版本,您需要

select arr[6:cardinality(arr)]
from test;

cardinality()是9.4中引入的,如果您使用的是更高版本,則需要:

select arr[6:array_lengt(arr,1)]
from test;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM