当前位置: 首页 > 面试题库 >

将jsonb列值转换为PostgreSQL中的多个列

谢灵均
2023-03-14
问题内容

可以说我在PostgreSQL中有一个带有以下各列的表:

CREATE TABLE sample
(
id int,
jsonb jsonb,
date date
)

我插入了这两行:

INSERT INTO sample
(id,jsonb,date)
VALUES
(1, '{"a":"a","b":"b"}', '2014/01/06'),
(2, '{"a":"a","b":"b"}', '2014/01/06')

我想将上面的行转换为此(在PostgreSQL中进行选择):

1,"a","b",'2014/01/06'
2,"a","b",'2014/01/06'

调用PHP json_encode(rows from sample)

并得到这样的东西:

[{"id":1,"a":"a","b":"b","date":"2014/01/06"},
{"id":2,"a":"a","b":"b","date":"2014/01/06"}]

但是现在,如果我用php调用,json_encode(rows from sample)我会得到:

[{"id":1,"jsonb":"{"a":"a","b":"b"}","date":"2014/01/06"},
{"id":2,"jsonb":"{"a":"a","b":"b"}","date":"2014/01/06"}]

希望有人能帮助我解决这个问题,谢谢大家


问题答案:

在9.4中很简单(使用了LATERAL join和jsonb函数):

    postgres =#选择* 
                  FROM sample,jsonb_to_record(jsonb,true)AS x(a文本,b文本);
     id | jsonb | 日期| 一个| b    
    ---- + ------------------------------ + ------------- + ------ + --------
      1 | {“ a”:“ a”,“ b”:“ b”} | 2014-01-06 | 一个| b
      2 | {“ a”:“ a”,“ b”:“ b”} | 2014-01-06 | 一个| b
      3 | {“ a”:“ Ahoj”,“ b”:“ Nazdar”} | 2014-01-06 | Ahoj | 纳兹达
    (3列)

确切结果:

postgres =#SELECT ID,A,B,日期 
               FROM sample,jsonb_to_record(jsonb,true)AS x(a文本,b文本);
 id | 一个| b | 日期    
---- + ------ + -------- + ------------
  1 | 一个| b | 2014-01-06
  2 | 一个| b | 2014-01-06
  3 | Ahoj | 纳兹达尔| 2014-01-06
(3列)


 类似资料:
  • 我所拥有的是Postgresql中的一个文本列,我想将其转换为JSONB列。 null 是否有一种方法可以将文本完全转换为jsonb,以便能够成功地从test中查询? 我不想在下面的查询中将文本转换为json,因为稍后我需要在'a'上创建索引。

  • 我有一个具有以下结构的数据帧: 我需要将单元格Group_Membership中的值转换为列,并得到一个如下所示的数据框: 我设法将列Group_成员资格中的值转换为列表,然后将其“分解”,但随后我应该以某种方式将其转置 不知怎的,我现在应该把它转过来了。而且,我不确定这是最好的方法。。。 非常感谢您的帮助!

  • 问题内容: 我正在尝试以下查询: (+1.0仅用于强制转换浮动。我的实际查询要复杂得多,此查询只是问题的测试用例。) 我得到了错误: 如果我添加显式强制转换: 错误变为: 我知道大多数jsonb值不能转换为浮点数,但是在这种情况下,我知道纬度都是JSON编号。 是否有一个将jsonb值强制转换为浮点数(或为不可广播的返回NULL)的函数? 问题答案: 要从中获得价值,有两种操作。第一个将返回。第二

  • 问题内容: 使用运算符将产生以下结果: 我希望能够实现以下结果(对于操作员来说只是一个占位符): 因此,您可以看到顶级键的子值已“合并”,使得结果包含和。 如何在Postgres中“深度”合并两个 JSONB 值? 如果可能的话,这可能吗? 一个更复杂的测试用例: 原始“合并”并成为对象的另一个测试用例: 问题答案: 您应该合并两个值都使用的未嵌套元素。在不平凡的查询中执行此操作可能会感到不舒服,

  • 我对字符串列表进行了一些数据转换,得到了一个列表,其中左表示错误,右表示成功转换的项。 我将结果划分为: 做了一些错误处理后,我想返回有效项目的。这意味着,返回所有右元素的值。由于分区,我已经知道项目的所有元素。我想出了五种可能的方法。但是易读性和性能最好的是什么?在Scala中有没有惯用的方法?

  • 我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。