array_filter
指定されたフィルターに一致する配列から値を返します。
この関数は次の2つの形式で使用できます。ラムダの採用により、より柔軟な配列フィルタリングが可能になります。ラムダ関数の詳細については、Lambda expressionを参照してください。この関数は v2.5 からサポートされています。
Syntax
array_filter(array, array<bool>)
array_filter(lambda_function, arr1,arr2...)
-
array_filter(array, array<bool>)
array<bool>
に一致する配列から値を返します。 -
array_filter(lambda_function, arr1,arr2...)
ラムダ関数に一致する配列から値を返します。
Parameters
array
: 値をフィルタリングする配列。
array<bool>
: 値をフィルタリングするために使用される式。
lambda_function
: 値をフィルタリングするために使用されるラムダ関数。
Usage notes
array_filter(array, array<bool>)
の2つの入力パラメータは ARRAY でなければならず、フィルター式はarray<bool>
に評価されることができます。array_filter(lambda_function, arr1,arr2...)
のラムダ関数は array_map() の使用ノートに従います。- 入力配列が null の場合、null が返されます。フィルター配列が null の場合、空の配列が返されます。
Examples
-
ラムダ関数を使用しない例
-- 配列内のすべての要素がフィルターに一致します。
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] |
+--------------------------------------------------------+