dokumentacja zaleca
za pomocą generate_subscripts funkcjonować. Poniższa funkcja emuluje array_search 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;
Zwraca indeks pierwszego dopasowania, jeśli jest obecny. Jeśli chcesz wszystkie dopasowania, po prostu zmień RETURNS INT do RETURNS SETOF INT . Ta funkcja, jak jest, zwraca NULL jeśli nie zostanie znalezione dopasowanie.
Ta funkcja działa tylko z tablicami jednowymiarowymi.
Pamiętaj też, że array_search(NULL, a) zawsze zwraca NULL , nawet jeśli tablica zawiera elementy null:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Dzieje się tak, ponieważ SQL uwzględnia NULL = NULL być nieznanym (np. NULL ). Zobacz porównanie funkcji
. Jeśli chcesz array_search aby móc znaleźć NULL elementy, zmień
WHERE $2[i] = $1
do
WHERE $2[i] IS NOT DISTINCT FROM $1