我有一个名为" 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代码。
答案 0 :(得分:1)
您应该取消variants
和skus
(使用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
中有多个匹配项,因此会有多行。