我有一个 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.*")');
我认为您可以使用此查询来达到您的目的
SELECT id FROM mytable WHERE properties->'data'->>'some_key' ~ '(?i)Foo.*';
为您进行分解,
->
运算符会浏览 JSON,并 ->>
将值提取为文本。