如何为jsonb密钥执行LIKE查询?

11 postgresql json jsonb

我有以下jsonb结构:

{'this': '1', 'this_that': '0', 'this_and_that': '5'}
Run Code Online (Sandbox Code Playgroud)

如何选择包含LIKE运算符的行?

SELECT * FROM myjson WHERE j ? 'this_%'
Run Code Online (Sandbox Code Playgroud)

返回0行...希望它匹配'this_that'和'this_and_that'.(注意:'_'后面的字符可能会有很大差异,因此我无法完全匹配).

Pav*_*ule 14

您的示例不应该起作用,因为在jsonbtext类型之间没有隐式转换.你可以强制执行:

SELECT '{"this": 1, "this_that": 0, "this_and_that": 5}'::jsonb::text 
            like '%"this%';
Run Code Online (Sandbox Code Playgroud)

这不是干净的解决方案.更好的是解压缩json,并使用横向连接过滤解压缩的数据

postgres=# SELECT key FROM  myjson, lateral jsonb_each_text(j) 
             WHERE key LIKE 'this\_%';
?????????????????
?      key      ?
?????????????????
? this_that     ?
? this_and_that ?
?????????????????
(2 rows)
Run Code Online (Sandbox Code Playgroud)