dokumentationen rekommenderar
med generate_subscripts fungera. Funktionen nedan emulerar PHP:s array_search :
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;
Detta returnerar indexet för den första matchningen, om det finns. Om du vill ha alla matchningar, ändra helt enkelt RETURNS INT till RETURNS SETOF INT . Denna funktion returnerar som den är NULL om ingen matchning hittas.
Denna funktion fungerar endast med endimensionella arrayer.
Tänk också på att array_search(NULL, a) returnerar alltid NULL , även om arrayen innehåller null-element:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Detta beror på att SQL anser NULL = NULL att vara okänd (dvs. NULL ). Se functions-comparison
. Om du vill ha array_search för att kunna hitta NULL element, ändra
WHERE $2[i] = $1
till
WHERE $2[i] IS NOT DISTINCT FROM $1