A recomendações de documentação usando o
generate_subscripts
função. A função abaixo emular o array_search
do PHP :CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)
RETURNS INT AS $$
SELECT i
FROM generate_subscripts($2, 1) AS i
WHERE $2[i] = $1
ORDER BY i
$$ LANGUAGE sql STABLE;
Isso retorna o índice da primeira correspondência, se presente. Se você quiser todas as correspondências, basta alterar
RETURNS INT
para RETURNS SETOF INT
. Esta função, como está, retorna NULL
se nenhuma correspondência for encontrada. Esta função só funciona com arrays unidimensionais.
Além disso, tenha em mente que
array_search(NULL, a)
sempre retorna NULL
, mesmo que a matriz contenha elementos nulos:> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Isso ocorre porque o SQL considera
NULL = NULL
ser desconhecido (ou seja, NULL
). Consulte comparação de funções
. Se você quiser array_search
para encontrar NULL
elementos, mudança WHERE $2[i] = $1
para
WHERE $2[i] IS NOT DISTINCT FROM $1