メインコンテンツまでスキップ

array_filter

array_filter

概要

指定されたフィルタに一致する配列の値を返します。

この関数には2つの形式があります。Lambda式の使用により、より柔軟な配列のフィルタリングが可能です。Lambda関数の詳細については、Lambda expressionを参照してください。この関数はv2.5からサポートされています。

構文

array_filter(array, array<bool>)
array_filter(lambda_function, arr1,arr2...)
  • array_filter(array, array<bool>)array<bool>に一致する配列の値を返します。
  • array_filter(lambda_function, arr1,arr2...)Lambda関数に一致する配列の値を返します。

パラメータ

array: 値をフィルタリングする配列。

array<bool>: 値をフィルタリングするために使用される式。

lambda_function: 値をフィルタリングするために使用されるLambda関数。

使用上の注意

  • array_filter(array, array<bool>)の2つの入力パラメータは、ARRAYである必要があり、フィルタ式はarray<bool>に評価できる必要があります。
  • array_filter(lambda_function, arr1,arr2...)のLambda関数は、array_map()の使用上の注意に従います。
  • 入力配列がnullの場合、nullが返されます。フィルタ配列がnullの場合、空の配列が返されます。

  • ラムダ関数を使用しない例

    -- 配列のすべての要素がフィルタと一致します。
    select array_filter([1,2,3],[1,1,1]);
    +------------------------------------+
    | array_filter([1, 2, 3], [1, 1, 1]) |
    +------------------------------------+
    | [1,2,3] |
    +------------------------------------+
    1 row in set (0.01 sec)

    -- フィルタがnullであり、空の配列が返されます。
    select array_filter([1,2,3],null);
    +-------------------------------+
    | array_filter([1, 2, 3], NULL) |
    +-------------------------------+
    | [] |
    +-------------------------------+
    1 row in set (0.01 sec)

    -- 入力配列がnullの場合、nullが返されます。
    select array_filter(null,[1]);
    +-------------------------+
    | array_filter(NULL, [1]) |
    +-------------------------+
    | NULL |
    +-------------------------+

    -- 入力配列とフィルタの両方がnullの場合、nullが返されます。
    select array_filter(null,null);
    +--------------------------+
    | array_filter(NULL, NULL) |
    +--------------------------+
    | NULL |
    +--------------------------+
    1 row in set (0.01 sec)

    -- フィルタにnullの要素が含まれている場合、空の配列が返されます。
    select array_filter([1,2,3],[null]);
    +---------------------------------+
    | array_filter([1, 2, 3], [NULL]) |
    +---------------------------------+
    | [] |
    +---------------------------------+
    1 row in set (0.01 sec)

    -- フィルタに2つのnullの要素が含まれている場合、空の配列が返されます。
    select array_filter([1,2,3],[null,null]);
    +---------------------------------------+
    | array_filter([1, 2, 3], [NULL, NULL]) |
    +---------------------------------------+
    | [] |
    +---------------------------------------+
    1 row in set (0.00 sec)

    -- 1つの要素のみがフィルタと一致します。
    select array_filter([1,2,3],[null,1,0]);
    +---------------------------------------+
    | array_filter([1, 2, 3], [NULL, 1, 0]) |
    +---------------------------------------+
    | [2] |
    +---------------------------------------+
    1 row in set (0.00 sec)
  • ラムダ関数を使用する例

      -- xの要素がyの要素よりも小さい要素を返します。
    select array_filter((x,y) -> x < y, [1,2,null], [4,5,6]);
    +--------------------------------------------------------+
    | array_filter((x, y) -> x < y, [1, 2, NULL], [4, 5, 6]) |
    +--------------------------------------------------------+
    | [1,2] |
    +--------------------------------------------------------+