#sql #arrays #postgresql
#sql #массивы #postgresql
Вопрос:
Я пытаюсь написать запрос, чтобы проверить, находится ли элемент в массиве строк.
Вот мой простой запрос select вместе с выводом
select languages from person limit 3;
{CSS,HTML,Java,JavaScript,Python}
{JavaScript,Python,TensorFlow}
{C ,Python}
Как мне написать запрос, чтобы найти всех людей, у которых есть «Java» в списке языков, которые они знают?
Я пытался следовать синтаксису, но это не работает.
select languages from person where languages @> ARRAY['Java']::varchar[];
Комментарии:
1. Получение этой ошибки — не удается разрешить ‘
Java
‘ заданные входные столбцы:
Ответ №1:
Вам нужно использовать строковую константу в левой части и оператор ANY в столбце массива:
select languages
from person
where 'Java' = any(languages);
Предполагается, что languages
определяется как text[]
или varchar[]
, как указывает ваш пример вывода
Ответ №2:
попробуйте это
select languages from person where 'Java' = ANY (string_to_array(languages , ','))
Ответ №3:
Вы можете выполнить поиск по нескольким шаблонам, заменив оператор ‘=’ на оператор соответствия регулярному выражению ‘~’, предшествующий регулярному выражению POSIX, такому как:
select languages from person where '[Java,Php]' ~ ANY (string_to_array(languages , ','))