0

如何让下面的查询返回“true”以反映我需要右侧数组中的至少一个值包含在左侧数组中?

SELECT   '["fun", "movies"]'::jsonb  @> '["fun", "movies","x"]'::jsonb;

上面的返回false(因为'x'不在左边的数组中)。

我已经尝试过?| 运营商链接

SELECT   '["fun", "movies"]'::jsonb  ?| '["fun", "movies","x"]'::jsonb;

但 postgres 返回错误

错误:运算符不存在:jsonb?| jsonb LINE 2: SELECT
'["fun", "movies"]'::jsonb ?| '[“乐趣”、“电影”、“x...

提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。SQL 状态:42883 字符:147

4

1 回答 1

1

您需要先将 jsonb 数组“转换”为 postgres 数组:

t=# SELECT   '["fun", "movies"]'::jsonb  ?| translate('["fun", "movies","x"]'::jsonb::text,'[]','{}')::text[];
 ?column?
----------
 t
(1 row)
于 2018-04-03T07:57:43.140 回答