TLDR:如何查找包含给定数组/列表中一个数字的json数字数组的每个记录。
好的,我尝试了很多次,阅读了很多其他线程,但我还没有找到有效的解决方案。我在Postgres中有一些JSON对象需要查找。它们包含多选选择的索引。
对象:
[{"id": 5, "list": [1, 2, 3]}, {"id": 6, "list": [4, 5, 6]}]
我需要选择所有包含项目1或5的对象。目前,我只能检查一个值。
SELECT '[1, 2, 3, 4]'::jsonb @> '3'::jsonb as result;
或者如果两者都存在:
SELECT '[1,2,3,4]'::jsonb @> '[1, 2]'::jsonb as result;
或者,有趣的是,如果我有一个字符串数组,我可以做我需要做的事情:
SELECT '["1","2","3","4"]'::jsonb ?| array['1', '5'] as result;
如何将其应用于JSON数字数组?我尝试了int []的类型转换和许多其他方法,没有起作用。我要么需要将数字数组转换为文本数组以便处理它,要么找到正确的类型转换来处理右边。这也不起作用:
? | array [1,5] :: text []
解决方案1:好吧,首先想到的是使用OR,看起来仍然是最快和最简单的解决方案。
解决方案2:
我终于找到了一种更短的方法(就像我认为它应该工作的方式),但它是一个类型转换地狱(9.4+),而且看起来不太好看:
SELECT array_to_json(translate('[1,2,3,4]'::jsonb::text, '[]', '{}')::text[])::jsonb ?| array['1','5'] as result;
基本上将整数转换为字符串。
OR
选项?..SELECT '[1, 2, 3, 4]'::jsonb @> '3'::jsonb OR '[1, 2, 3, 4]'::jsonb @> '5'::jsonb as result
- Vao Tsun