Например, один столбец в моей таблице представляет собой массив, я хочу проверить, содержит ли этот столбец элемент, который содержит подстроку «запрещено» (таким образом, такие элементы, как «запрещено в 12:00», «запрещено администратором» будут учитываться, Я считаю, что мне придется использовать «нравится», чтобы определить шаблон). Как написать sql для этого?
Массив Presto содержит элемент, которому нравится какой-то шаблон
comment
Пожалуйста, добавьте образцы данных и ожидаемый результат
- person mtr.web   schedule 08.06.2018
Ответы (3)
Используйте функции массива от presto:
filter()
, который возвращает элементы, удовлетворяющие заданному условиюcardinality()
, который возвращает размер массива:
Как это:
where cardinality(filter(myArray, x -> x like '%denied%')) > 0
person
Bohemian♦
schedule
08.06.2018
Вы можете
reduce(myArray, false, (a, x -> a OR x like '%denied%'))
избежать копирования массива для каждой строки.
- person Piotr Findeisen; 09.06.2018
В более новых версиях PrestoSQL (теперь известная как Trino), вы можете использовать функцию any_match
:
WHERE any_match(column, e -> e like '%denied%'))
person
Martin Traverso
schedule
30.04.2021
См. документацию по оператору массива здесь
contains(array_column,'denied')
person
twoy
schedule
20.01.2020
это не отвечает на вопрос. Согласно документу, оператор
CONTAINS
ищет только точные совпадения.
- person bmarcov; 29.04.2020