我目前正在postgres数据库的jsonb列中以以下格式存储数据:{"ids": [4, 3, 2, 1]}
,其中的值是一个整数数组。
我想做以下事情:
-
在'ids'键的值
数组中查找列包含值4的行。 -
定位列中包含值2,3和&"ids"键的值数组中的1。
我最近一次尝试使用以下
select * from tablename WHERE (column_name -> ids)::integer[] && ARRAY[1,3]
这在:integer[]ERROR: cannot cast type jsonb to integer[]
处给了我一个类型转换错误
我怀疑我试图抛出"id"部分,需要更深入一层,但我不确定如何(如果这是正确的方法(。
使用包含运算符@>
select *
from tablename
WHERE column_name @> '{"ids":[4]}'
这也适用于多个值:
select *
from tablename
WHERE column_name @> '{"ids":[1,2,3]}'
在线示例
SELECT * from tablename WHERE column_name -> 'ids' @> '[4]'::jsonb
SELECT * from tablename WHERE column_name -> 'ids' @> '[2,3,1]'::jsonb