如何对 jsonb 键执行 LIKE 查询?
How can I perform a LIKE query for a jsonb key?
我有以下 jsonb 结构:
{'this': '1', 'this_that': '0', 'this_and_that': '5'}
如何 select 包含 LIKE 运算符的行?
SELECT * FROM myjson WHERE j ? 'this_%'
Returns 0 行...希望它能匹配 'this_that' 和 'this_and_that'。 (注意:“_”后面的字符可能会有很大差异,因此我无法进行精确匹配)。
您的示例应该不起作用,因为 jsonb
和 text
类型之间没有隐式转换。您可以强制转换:
SELECT '{"this": 1, "this_that": 0, "this_and_that": 5}'::jsonb::text
like '%"this%';
这不是干净的解决方案。更好的方法是解包 json,并使用横向连接
过滤解包数据
postgres=# SELECT key FROM myjson, lateral jsonb_each_text(j)
WHERE key LIKE 'this\_%';
┌───────────────┐
│ key │
╞═══════════════╡
│ this_that │
│ this_and_that │
└───────────────┘
(2 rows)
我有以下 jsonb 结构:
{'this': '1', 'this_that': '0', 'this_and_that': '5'}
如何 select 包含 LIKE 运算符的行?
SELECT * FROM myjson WHERE j ? 'this_%'
Returns 0 行...希望它能匹配 'this_that' 和 'this_and_that'。 (注意:“_”后面的字符可能会有很大差异,因此我无法进行精确匹配)。
您的示例应该不起作用,因为 jsonb
和 text
类型之间没有隐式转换。您可以强制转换:
SELECT '{"this": 1, "this_that": 0, "this_and_that": 5}'::jsonb::text
like '%"this%';
这不是干净的解决方案。更好的方法是解包 json,并使用横向连接
过滤解包数据postgres=# SELECT key FROM myjson, lateral jsonb_each_text(j)
WHERE key LIKE 'this\_%';
┌───────────────┐
│ key │
╞═══════════════╡
│ this_that │
│ this_and_that │
└───────────────┘
(2 rows)