La documentación recomienda
usando generate_subscripts
función. La siguiente función emula array_search
de 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;
Esto devuelve el índice de la primera coincidencia, si está presente. Si desea todas las coincidencias, simplemente cambie RETURNS INT
a RETURNS SETOF INT
. Esta función, tal como está, devuelve NULL
si no se encuentra ninguna coincidencia.
Esta función solo funciona con arreglos unidimensionales.
Además, tenga en cuenta que array_search(NULL, a)
siempre devuelve NULL
, incluso si la matriz contiene elementos nulos:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Esto se debe a que SQL considera NULL = NULL
ser desconocido (es decir, NULL
). Consulte comparación de funciones
. Si quieres array_search
para poder encontrar NULL
elementos, cambio
WHERE $2[i] = $1
a
WHERE $2[i] IS NOT DISTINCT FROM $1