Как искать текст в массиве полей varchar в Presto?

Поле определяется как array(varchar) в модеанлятическом режиме.

Я хочу найти записи с полем, содержащим определенный текстовый шаблон, говорит 'ABCD'.

Если я запускаю этот SQL:

select * from data_table 
where top_results like '%ABCD%'

Выдает эту ошибку:

Query failed (#20190730_021145_23663_dn9fj): line 2:7: Left side of LIKE expression must evaluate to a varchar (actual: array(varchar)

Каков правильный синтаксис для обнаружения наличия определенной строки?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
0
7 332
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Использовать фильтр (массив (T), функция (T, логическое значение)) -> массив (T)

он возвращает массив, содержащий элементы, для которых функция возвращает значение true. Используйте функцию кардинальности, чтобы проверить, не пуст ли массив:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;

Возвращает

true

Проверьте другое значение:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;

Возвращает

false

Надеюсь, вы уловили идею.

Преобразуйте его в строку json, а затем найдите строку

json_format(cast(top_results as JSON))

select * from data_table 
where json_format(cast(top_results as JSON)) like '%ABCD%'

Ответы, содержащие только код, не рекомендуются в Stack Overflow, поскольку они не объясняют, как это решает проблему. Пожалуйста, отредактируйте свой ответ, чтобы объяснить, что делает этот код и как он решает проблему, чтобы он был полезен для OP, а также для других пользователей с похожими проблемами.

Klaus Gütter 22.08.2020 08:09

Это примерно так же просто, как и получается, но отмечено.

user2141737 24.08.2020 16:35

Другие вопросы по теме