Postgresql 9.5 JSONB嵌套数组LIKE语句

时间:2016-06-02 20:58:56

标签: arrays postgresql nested

我有一个名为" product"的jsonb列,其中包含与下面类似的jsonb对象。我试图找出如何针对postgresql 9.5中的相同数据执行LIKE语句。

{
  "name":"Some Product",
  "variants":[
    {
      "color":"blue",
      "skus":[
        {
          "uom":"each",
          "code":"ZZWG002NCHZ-65"
        },
        {
          "uom":"case",
          "code":"ZZWG002NCHZ-65-CASE"
        },
      ]
    }
]}

以下查询适用于完全匹配。

SELECT * FROM products WHERE product#> '{variants}' @> '[{"skus":[{"code":"ZZWG002NCHZ-65"}]}]';

但我需要支持LIKE语句,例如"以"开头,"结束宽度"和"包含"。怎么会这样做?

示例:假设我希望所有返回的产品都有一个以" ZZWG00"开头的sku代码。

1 个答案:

答案 0 :(得分:1)

您应该取消variantsskus(使用jsonb_array_elements()),这样您就可以检查sku->>'code'

SELECT DISTINCT p.* 
FROM 
    products p,
    jsonb_array_elements(product->'variants') as variants(variant),
    jsonb_array_elements(variant->'skus') as skus(sku)
WHERE
    sku->>'code' like 'ZZW%';

使用DISTINCT因为您在一个product中有多个匹配项,因此会有多行。