PostgreSQL配列内の値の位置を取得するにはどうすればいいでしょうか?.index()
Pythonのメソッドとarray_search()
PHP 用の関数は見つかりましたが、PostgreSQL 用の関数は見つかりません。これを行うにはストアド関数を作成する必要がありますか? 組み込み関数を使用して解決することを好みます。
ベストアンサー1
のドキュメントの推奨事項関数を使用します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 次元配列でのみ機能します。
また、配列に null 要素が含まれている場合でも、 はarray_search(NULL, a)
常に を返すことに注意してください。NULL
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
これはSQLNULL = NULL
が未知(すなわちNULL
)。参照関数の比較要素array_search
を見つけられるようにしたい場合は、NULL
WHERE $2[i] = $1
に
WHERE $2[i] IS NOT DISTINCT FROM $1