документацията препоръчва
използвайки 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