array_filter
Возвращает значения из массива, соответствующие заданному фильтру.
Эта функция имеет две следующие формы. Вариант с lambda-выражением обеспечивает более гибкую фильтрацию массивов. Для получения дополнительной информации о lambda-функциях см. Lambda expression. Эта функция поддерживается начиная с версии 2.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>)должны быть типа ARRAY, а выражение фильтра должно возвращатьarray<bool>. - Lambda-функция в
array_filter(lambda_function, arr1,arr2...)следует примечаниям по использованию в array_map(). - Если входной массив равен null, возвращается null. Если массив фильтра равен null, возвращается пустой массив.
Примеры
-
Примеры без использования lambda-функций
-- Все элементы массива соответствуют фильтру.
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)
-- Фильтр содержит два элемента null, возвращается пустой массив.
select array_filter([1,2,3],[null,null]);
+---------------------------------------+
| array_filter([1, 2, 3], [NULL, NULL]) |
+---------------------------------------+
| [] |
+---------------------------------------+
1 row in set (0.00 sec)
-- Только один элемент соответствует фильтру.
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) -
Примеры с использованием lambda-функций
-- Возвращает элементы 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] |
+--------------------------------------------------------+-- Возвращает элементы x, которые больше или равны 3.
SELECT array_filter(x->x>=3, [2,3,4]);
+--------------------------------------+
| array_filter(x -> x >= 3, [2, 3, 4]) |
+--------------------------------------+
| [3,4] |
+--------------------------------------+