Posso remover facilmente o primeiro elemento de uma matriz:
SELECT (ARRAY[1,2,3])[2:]
--{2,3}
Qual é a maneira mais simples de remover o último elemento também? O tamanho é dinâmico e não é conhecido em tempo de compilação.
Posso remover facilmente o primeiro elemento de uma matriz:
SELECT (ARRAY[1,2,3])[2:]
--{2,3}
Qual é a maneira mais simples de remover o último elemento também? O tamanho é dinâmico e não é conhecido em tempo de compilação.
trim_array() está lá desde o PostgreSQL 14:
A indexação de array do Postgres não é estritamente baseada em 1, e é por isso que ela oferece
array_lower()
,array_upper()
,trim_array()
. O[2:]
slice não remove o 1º elemento, ele remove todos os elementos anteriores ao índice 2, que podem ser muitos, um ou nenhum:demo em db<>fiddle
Nesta matriz, o primeiro índice é
50
, não1
. Usararray_length()
para obter o índice do último elemento também não é confiável: seu comprimento é ,4
mas o último índice é53
.Você pode até tropeçar em índices negativos:
Nesse caso, todas as suas fatias e subscritos usando comprimento e índices positivos apagariam tudo.
O exemplo também demonstra por que subscritos negativos não são contados de trás para frente a partir do final - eles são perfeitamente válidos como índices regulares sem inverter a ordem. O
[2:-2]
and(arr[2:])[:-2]
que você provavelmente esperava obtém um array vazio: a primeira parte corta tudo abaixo de index2
que inclui todos os elementos em posições com um índice negativo, então a segunda pergunta apenas aqueles até-2
, todos os quais você acabou de remover.Você pode usar a função de comprimento do array para obter o comprimento do array: