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] |
+--------------------------------------------------------+