我有一个包含Json类型列的表,我正在尝试根据该json列中包含的值查询该表。
以下是相关的DDL:
create table user
(
roles json
);
以下是角色值的含义:
[70,254]
我希望能够执行这样的查询:
select * from user where roles in(254);
所以我试过这个:
SELECT * from apptree.atf_app_user where roles @> 254;
它给了我这个错误:
[2017-12-01 14:58:16] [42883] ERROR: operator does not exist: json @> integer
[2017-12-01 14:58:16] Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
[2017-12-01 14:58:16] Position: 48
答案 0 :(得分:1)
运算符@> works on jsonb arguments.将列转换为jsonb:
select *
from apptree.atf_app_user
where roles::jsonb @> '254';
更新。没有运算符可以在json数组中搜索任何多个值。您可以使用函数json_array_elements_text(),
例如:
select t.*
from apptree.atf_app_user t
cross join json_array_elements_text(roles)
where value in ('70', '71');