如何查询 Postgres json 列中的数组?
How to query array in Postgres json column?
提前致谢。假设,我有一个 table 包含这样的数组中的值。
CREATE TABLE example (
id serial4 NOT NULL,
name varchar(100) NOT NULL,
content_type json NULL
CONSTRAINT example_pkey PRIMARY KEY (id)
);
id |name |content_type
-----------------------
1 | P | ['a','b','c']
2 | Q | ['a',]
3 | R | ['b','c']
4 | S | ['a','c']
我想在content_type
中查找哪一行包含'c'
我试过了,但是没有得到,
select * from table where ARRAY['c'] && content_type;
有人帮我建立查询吗?
更新以将列类型从文本[]更改为json
如果您的列类型是 JSON,您可以使用两种方案:
- 转换为 jsonb 并使用
?
运算符 (Postgres document)
select * from test where content_type::jsonb ? 'c';
- 使用
json_array_elements_text
select distinct on(t.id) t.*
from
test t
cross join json_array_elements_text(content_type) je
where
je.value = 'c';
旧场景
您可以使用 any
函数来检查数组中是否存在值,或者根据 Postgres document 使用数组运算符 @>
- 与
any
select * from test where 'c' = any(content_type);
- 与
@>
select * from test where content_type @> array['c'];
提前致谢。假设,我有一个 table 包含这样的数组中的值。
CREATE TABLE example (
id serial4 NOT NULL,
name varchar(100) NOT NULL,
content_type json NULL
CONSTRAINT example_pkey PRIMARY KEY (id)
);
id |name |content_type
-----------------------
1 | P | ['a','b','c']
2 | Q | ['a',]
3 | R | ['b','c']
4 | S | ['a','c']
我想在content_type
中查找哪一行包含'c'
我试过了,但是没有得到,
select * from table where ARRAY['c'] && content_type;
有人帮我建立查询吗?
更新以将列类型从文本[]更改为json
如果您的列类型是 JSON,您可以使用两种方案:
- 转换为 jsonb 并使用
?
运算符 (Postgres document)
select * from test where content_type::jsonb ? 'c';
- 使用
json_array_elements_text
select distinct on(t.id) t.*
from
test t
cross join json_array_elements_text(content_type) je
where
je.value = 'c';
旧场景
您可以使用 any
函数来检查数组中是否存在值,或者根据 Postgres document 使用数组运算符 @>
- 与
any
select * from test where 'c' = any(content_type);
- 与
@>
select * from test where content_type @> array['c'];