メインコンテンツまでスキップ
バージョン: 2.5

array_filter

説明

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

この関数は以下の2つの形式で使用できます。ラムダの採用により、より柔軟な配列フィルタリングが可能です。ラムダ関数の詳細については、 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...)

    ラムダ関数に一致する配列の値を返します。

パラメータ

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

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

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

使用上の注意

  • array_filter(array, array<bool>) の2つの入力パラメータはARRAYでなければならず、フィルター式は array<bool> に評価されることができます。
  • array_filter(lambda_function, arr1,arr2...) のラムダ関数は 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] |
    +--------------------------------------------------------+