PostgreSQL JSONB 查询:使用 jsonb_path_exists 和 like_regex 匹配不同类型(字符串、整数)的值

问题描述 投票:0回答:1

我有一个 PostgreSQL 数据库,其中有一个名为

properties
的 JSONB 列。我正在尝试创建一个查询,该查询与
properties
内的值与某个值匹配的所有元素相匹配。

目前,我正在使用

jsonb_path_exists
like_regex
的组合,如下所示:

SELECT id FROM mytable WHERE jsonb_path_exists(properties, '$.data.** ? (@ like_regex "(?i)Foo.*")');

这对于字符串值来说效果很好,但对于非字符串元素就会出现问题。例如,如果我想搜索整数值,

like_regex
每次都会返回 false。

有没有办法解决这个问题,例如使用

@.toString()
之类的东西?`

如果你想自己尝试一下

SELECT jsonb_path_exists('{"data": {"foo1": 344, "foo2": "Tata"}}', '$.data.** ? (@ like_regex "(?i)344.*")');
json postgresql jsonb
1个回答
0
投票

我认为您可以使用此查询来达到您的目的

SELECT id FROM mytable WHERE properties->'data'->>'some_key' ~ '(?i)Foo.*';

为您进行分解,

->
运算符会浏览 JSON,并
->>
将值提取为文本。

© www.soinside.com 2019 - 2024. All rights reserved.