ドキュメントの推奨事項
generate_subscriptsを使用する 関数。以下の関数は、のPHPの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;
存在する場合、これは最初の一致のインデックスを返します。すべての一致が必要な場合は、RETURNS INTを変更するだけです。 RETURNS SETOF INTへ 。この関数は、そのままNULLを返します。 一致するものが見つからない場合。
この関数は、1次元配列でのみ機能します。
また、array_search(NULL, a) 常にNULLを返します 、配列にnull要素が含まれている場合でも:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
これは、SQLがNULL = NULLを考慮するためです。 不明 (つまり、NULL )。 functions-comparison
を参照してください 。 array_searchが必要な場合 NULLを見つけることができるようにする 要素、変更
WHERE $2[i] = $1
に
WHERE $2[i] IS NOT DISTINCT FROM $1