我有一个名为“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 语句,例如“开头为”、“结尾宽度”和“包含”。这将如何完成?
示例:假设我希望退回所有 SKU 代码以“ZZWG00”开头的产品。
最佳答案
您应该取消嵌套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
,因为一个产品
中存在多个匹配结果,您将获得多行结果。
关于arrays - Postgresql 9.5 JSONB嵌套数组LIKE语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602004/