postgresql '{“a”:1,“B”:2,“c”:3}'::jsonb?|array ['b','d']整数数组的等效表达式

pgky5nke  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(119)

有没有办法为整数数组实现这个功能?

jsonb ?| text[] → boolean
Do any of the strings in the text array exist as top-level keys or array elements?
'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] → t

上面的描述来自postgresql文档,我想实现同样的事情来过滤json整数数组,如果它包含任何来自整数数组,类似这样:

'[1, 2, 3]'::jsonb ?| array[1, 2]

但我得到一个错误

[42883] ERROR: operator does not exist: jsonb ?| integer[] Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. Position: 87

zpgglvta

zpgglvta1#

我会使用containment运算符:

'[1, 2, 3]'::jsonb @> ANY (ARRAY['[1]'::jsonb, '[2]'::jsonb])
xpszyzbs

xpszyzbs2#

在尝试了多个版本后,我认为这是我得到的最简单的一个:

SELECT DISTINCT t.*
FROM "Table" t
JOIN jsonb_array_elements_text(t."TypeJson"::jsonb) "Type" ON TRUE
WHERE "Type"::integer in (1, 2, 3);

相关问题