dokumentationen anbefaler
ved hjælp af generate_subscripts
fungere. Funktionen nedenfor emulerer PHP's array_search
:
CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)RETURNER INT AS $$ SELECT i FROM gener_subscripts($2, 1) AS i WHERE $2[i] =$1 BESTILLE EFTER i$$ LANGUAGE sql STABLE; kode>
Dette returnerer indekset for det første match, hvis det findes. Hvis du vil have alle matches, skal du blot ændre RETURNS INT
til RETURNERER SETOF INT
. Denne funktion returnerer som den er NULL
hvis der ikke findes noget match.
Denne funktion virker kun med endimensionelle arrays.
Husk også, at array_search(NULL, a)
returnerer altid NULL
, selvom arrayet indeholder null-elementer:
> SELECT array_search(null, array[1, 2, null, 4]); array_search --------------(1 række)
Dette er fordi SQL betragter NULL =NULL
at være ukendt (dvs. NULL
). Se funktionssammenligning
. Hvis du vil have array_search
for at kunne finde NULL
elementer, ændre
WHERE $2[i] =$1
til
HVOR $2[i] IKKE FORSKELLER FRA $1