SQL 如何将数组转换为用于 IN 子句的值

SQL how to convert array to values for use in IN clause

使用 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', ','));

错误:

Operator does not exist: character varying = text[]

我的问题是如何将 'ABC,BCD' 转换为要在 IN 子句中使用的值列表。更喜欢 SQL 查询中的答案,而不是方法或函数。谢谢

获得所需结果的最简单方法是使用运算符 LIKE:

而不是 IN
select * from TAB1
where ',' || 'ABC,BCD' || ',' like '%,' || Y || ',%' 

将串联运算符 || 替换为在您的数据库中工作的运算符(如 + 用于 SQL 服务器)或函数 concat().
demo.
结果:

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

对于数组,需要使用ANY运算符:

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

使用这个实用函数将数组转换为逗号分隔值以在 IN 子句中使用:

const arrayToInClauseString = (arrayData) => {
   return arrayData
     .map((item, index, all) => {
       if (index === all.length - 1) {
         return `"${item}"`;
       } else {
         return `"${item}",`;
       }
     })
     .join("");
 };