PostgreSQL配列内の値の位置を見つける 質問する

PostgreSQL配列内の値の位置を見つける 質問する

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

おすすめ記事