在Postgres的JSONB数组中检查一个字符串是否存在

3

我正在寻找一种方法来查找Postgres类型为“jsonb”的列中是否存在字符串,该列具有以下值:

id | numbers(jsonb)
1  | ["54954565","16516516","565196212"]
2  | ["195195159","252432","275782872"]
3  | ["54954565","61595161","728278"]
4  | ["245735435","75454","2782"]

例如:

如果“16516516”存在于与任何数字条目对应的数组中,我想要获取整个行。

所以,如果我查询“16516516”。

我应该获得的行是:

id | numbers
1  | ["54954565","16516516","565196212"]```
2个回答

4

3
使用包含运算符@>
SELECT * FROM t 
WHERE numbers @> '["16516516"]'

演示 db<>fiddle:

WITH t (id ,numbers) AS (
  VALUES (1,'["54954565","16516516","565196212"]'::jsonb),
         (2,'["195195159","252432","275782872"]'::jsonb),
         (3,'["54954565","61595161","728278"]'::jsonb),
         (4,'["245735435","75454","2782"]'::jsonb)
)
SELECT * 
FROM t WHERE numbers @> '["16516516"]';
 id |                numbers                
----+---------------------------------------
  1 | ["54954565", "16516516", "565196212"]
(1 row)

感谢@jim提供这个好答案。 我正在寻找另外两个问题:
  1. 如何实现数组的contains some。在这里,一些元素应该包含在jsonb列["54954565","16516516"]中。
  2. 如何实现数组的contains none。在这里,没有一个元素应该包含在jsonb列["54954565","16516516"]中。
提前致谢。
- Md. Sajedul Karim
1
@Md.SajedulKarim 谢谢。恐怕我没有理解你的问题。你能否发布一个带有一些示例数据和期望结果的问题?谢谢。 - Jim Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接