繁体   English   中英

Postgres jsonb列从数组中选择字符串匹配通配符

[英]Postgres jsonb column select from array where a string matches wildcards

我希望将postgres jsonb列与数组一起使用并能够对它们进行过滤,因此我有一个包含列的模式:

CREATE TABLE testtable
(
id  varchar(32) NOT NULL,   
refs    jsonb           NULL,
)

并且该列包含Json格式的数据:

{ "refs": ["one-1-0", "two-3-2", "two-3-4" ] }

我希望能够返回包含以(例如)“two-3-”开头的数组元素的所有行

我已经尝试了几件事,并且无法让它按照我的意愿工作(我最接近的是将数组部分作为文本并将其作为字符串搜索 - 但这很讨厌)

我还想为此列添加合适的索引以支持此查询。

任何建议都会很棒,很受欢迎! 谢谢

逐步演示:db <>小提琴

SELECT DISTINCT                                   -- 3
    id, refs
FROM
    testtable,
    jsonb_array_elements_text(refs -> 'refs')     -- 1
WHERE
    value LIKE 'two_3%'                           -- 2
  1. 将数组扩展为每个数组元素一行
  2. 使用LIKE比较器和%通配符按数组元素( value )过滤所有记录
  3. 如果有几次出现,则每次出现一个记录。 因此,如果您只想要原始数据集,则可以使用DISTINCT删除重复项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM