документацията препоръчва
използвайки generate_subscripts функция. Функцията по-долу емулира 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;
Това връща индекса на първото съвпадение, ако има такова. Ако искате всички съвпадения, просто променете RETURNS INT към RETURNS SETOF INT . Тази функция, както е, връща NULL ако не бъде намерено съвпадение.
Тази функция работи само с едномерни масиви.
Освен това имайте предвид, че array_search(NULL, a) винаги връща NULL , дори ако масивът съдържа нулеви елементи:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Това е така, защото SQL счита NULL = NULL да бъде неизвестен (т.е. NULL ). Вижте сравнение на функции
. Ако искате array_search за да можете да намерите NULL елементи, промяна
WHERE $2[i] = $1
до
WHERE $2[i] IS NOT DISTINCT FROM $1