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("");
};
使用 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("");
};