JSONB查询如何检查至少一个数组包含

时间:2018-04-03 06:18:44

标签: postgresql jsonb postgresql-10

如何让以下查询返回' true'反映我需要右边数组中至少有一个值,包含在左边的数组中?

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

以上内容返回false(因为' x'不在左侧数组中)。

我尝试了?| operator link

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

但是postgres会返回错误

  

错误:运算符不存在:jsonb?| jsonb第2行:选择
  ' ["有趣","电影"]' :: jsonb?| ' ["有趣","电影"," x ...

     

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

1 个答案:

答案 0 :(得分:1)

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

t=# SELECT   '["fun", "movies"]'::jsonb  ?| translate('["fun", "movies","x"]'::jsonb::text,'[]','{}')::text[];
 ?column?
----------
 t
(1 row)