sql >> データベース >  >> RDS >> PostgreSQL

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

    ドキュメントの推奨事項 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
    


    1. MySQLの単純な選択クエリは遅い

    2. SQLで重複行を削除する方法

    3. MySQLでのRTRIM()関数のしくみ

    4. where句の関数をOracleで1回実行するように強制するにはどうすればよいですか?