De documentatie beveelt aan
met behulp van de generate_subscripts
functie. De onderstaande functie emuleert de array_search
van 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;
Dit retourneert de index van de eerste overeenkomst, indien aanwezig. Als je alle overeenkomsten wilt, verander dan gewoon RETURNS INT
naar RETURNS SETOF INT
. Deze functie retourneert, zoals het is, NULL
als er geen overeenkomst is gevonden.
Deze functie werkt alleen met eendimensionale arrays.
Houd er ook rekening mee dat array_search(NULL, a)
retourneert altijd NULL
, zelfs als de array null-elementen bevat:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Dit komt omdat SQL NULL = NULL
. beschouwt onbekend zijn (d.w.z. NULL
). Zie functions-comparison
. Als u array_search
. wilt om NULL
. te kunnen vinden elementen, wijzigen
WHERE $2[i] = $1
naar
WHERE $2[i] IS NOT DISTINCT FROM $1