【问题标题】:Postgresql: How to perform LIKE query on a json array?Postgresql:如何对 json 数组执行 LIKE 查询?
【发布时间】:2017-10-17 23:46:38
【问题描述】:

我有一个带有存储为 JSONB 列的标签的表。喜欢:

id   tags
---- ------------------------------
1    ["red", "blue"]
2    ["orange", "light pink"]
3    ["pink", "green"]

我想选择包含部分匹配模式的标签的行——在我的例子中,我想要其中带有空格的标签。类似于SELECT * FROM the_table WHERE tags LIKE '% %'。将数组转换为文本几乎可以工作,除了所有内容都匹配,因为 Postgres 在输出 JSON 中的逗号后放置了一个空格。

【问题讨论】:

    标签: json postgresql jsonb


    【解决方案1】:

    使用函数jsonb_array_elements_text().

    with my_table(id, tags) as (
    values
        (1, '["red", "blue"]'::jsonb),
        (2, '["orange", "light pink"]'),
        (3, '["pink", "green"]')
    )
    
    select *
    from my_table, jsonb_array_elements_text(tags)
    where value like '% %';
    
     id |           tags           |   value    
    ----+--------------------------+------------
      2 | ["orange", "light pink"] | light pink
    (1 row) 
    

    【讨论】:

    • 如何对这样的数组进行 LIKE 查询?
    • 'value' 是包含拆分文本的列,其中数组中的每个元素都有一行,并与它来自的行相连。所以在答案中,where value like '% %' 正在查找包含空格的行。
    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2021-02-20
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多