Перейти к основному содержимому
Версия: 2.0.x

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