我确定这是一个重复的问题,因为某个地方有答案,但是谷歌搜索了10分钟之后我还没有找到答案,所以我不知道呼吁编辑不要因为它可能对其他人有用而关闭它。
我使用的是Postgres 9.5。这是我的表:
bound
我想用" Journal"找到所有行。在 Column │ Type │ Modifiers
─────────────────────────┼───────────────────────────┼─────────────────────────────────────────────────────────────────────────
id │ integer │ not null default nextval('mytable_id_seq'::regclass)
pmid │ character varying(200) │
pub_types │ character varying(2000)[] │ not null
。
我已经找到了文档和Google搜索,这就是我尝试过的:
pub_types
我已经扫描过the postgres array docs,但无法看到如何运行查询的简单示例,而StackOverflow问题似乎都是基于更复杂的示例。
答案 0 :(得分:34)
这应该有效:
select * from mytable where 'Journal'=ANY(pub_types);
即。语法是<value> = ANY ( <array> )
。另请注意,postresql中的字符串文字是用单引号编写的。
答案 1 :(得分:5)
使用 ANY 运算符,您只能搜索一个值。
如果要搜索多个值,可以使用 @> 运算符。
例如,
select * from mytable where pub_types @> '{"Journal", "Book"}';
您可以指定自己喜欢的顺序。
答案 2 :(得分:1)
我不得不相信这是非常低效的,并且为什么不在列中实现数组的一个很好的例子,一个带有FK引用的单独表将会表现得更好,并且更灵活,更易于管理。 / p>
但无论如何,这对我有用:
select * from mytable
where array_to_string(pub_types, ',') like '%Journal%'
答案 3 :(得分:1)
我们可以使用IN
而不是ANY
来将数组强制转换为枚举数组,例如:
create type example_enum as enum (
'ENUM1', 'ENUM2'
);
create table example_table (
id integer,
enum_field example_enum
);
select
*
from
example_table t
where
t.enum_field = any(array['ENUM1', 'ENUM2']::example_enum[]);
或者我们仍然可以使用'IN'子句,但是首先,我们应该'取消嵌套':
select
*
from
example_table t
where
t.enum_field in (select unnest(array['ENUM1', 'ENUM2']::example_enum[]));
答案 4 :(得分:0)
这对我有用
let exampleArray = [1, 2, 3, 4, 5];
let exampleToString = exampleArray.toString(); //convert to toString
let query = `Select * from table_name where column_name in (${exampleToString})`; //Execute the query to get response
我遇到了同样的问题,然后经过一个小时的努力,我才知道不应在查询中直接访问该数组。因此,然后我发现数据应该在自身的括号内发送,然后再次使用js中的toString方法将该数组转换为字符串。所以我通过执行上面的查询来工作,并得到了预期的结果