PostgreSQL как запросить массив строк

#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 , ','))