首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres jsonb_array_elements

Postgres jsonb_array_elements
EN

Stack Overflow用户
提问于 2021-09-08 15:03:32
回答 2查看 78关注 0票数 0

我有一个包含下一个jsonb字段的表-

代码语言:javascript
复制
{ "auth": [{"roles": ["role1", "role2"]}]}

当我做这个查询时-

代码语言:javascript
复制
select jsonb_array_elements(role) as role from (
    select x -> 'roles' as role
    from test,
         jsonb_array_elements(data->'auth') x

输出格式为

代码语言:javascript
复制
role
----
"role1"
"role2"

目前的问题是,如果我尝试添加它不起作用的地方

x.role = '"role1"',但是这个确实可以用x.role like '%"role1"%'

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 15:23:13

可以使用->>操作符将“角色”字段恢复为文本数据。

代码语言:javascript
复制
create table test (data jsonb);

insert into test values('{ "auth": [{"roles": ["role1", "role2"]}]}');

with cte as (
   select jsonb_array_elements(role) ->> 0 as role from 
     (
       select x -> 'roles' as role
              from test, jsonb_array_elements(data->'auth') x) y)
select role from cte where role = 'role1';
票数 1
EN

Stack Overflow用户

发布于 2021-09-08 15:24:18

问题是jsonb_array_elementsjsonb形式返回结果,而您在将其与字符串文字进行比较时遇到了麻烦。

使用jsonb_array_elements_text而不是第一个jsonb_array_elements调用,那么结果将是text类型,这应该不会给您带来麻烦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69105462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档