SQL, как преобразовать массив в значения для использования в предложении IN - PullRequest
0 голосов
/ 14 октября 2019

Работа в Postgres SQL:

create table TAB1 ( X int, Y varchar(12));

insert into TAB1 values (1, 'ABC');
insert into TAB1 values (2, 'BCD');
insert into TAB1 values (3, 'EFG');

Мой аргумент запроса представлен в виде строки, разделенной запятыми: 'ABC, BCD'

Я пытаюсь создать запрос ниже, но получаюошибка:

select * 
from TAB1 
where Y in (STRING_TO_ARRAY('ABC,BCD', ','));

ОШИБКА:

Оператор не существует: символ меняется = текст []

Мой вопрос заключается в том, как преобразовать 'ABC, BCD 'к списку значений для использования в IN CLAUSE. Предпочитайте ответ в запросе SQL, а не метод или функцию. Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Для массива необходимо использовать оператор ANY:

select * 
from TAB1 
where Y = any( STRING_TO_ARRAY('ABC,BCD', ',') );
2 голосов
/ 14 октября 2019

Самый простой способ получить нужные результаты - вместо IN использовать оператор LIKE:

select * from TAB1
where ',' || 'ABC,BCD' || ',' like '%,' || Y || ',%' 

заменить оператор конкатенации || на оператор, который работает в вашемдБ, (например, + для SQL Server) или функция concat(). Смотрите демо . Результаты:

>  X | Y  
> -: | :--
>  1 | ABC
>  2 | BCD
...