从表格sql结果自动生成JSON / XML

时间:2017-06-30 08:54:47

标签: sql sql-server json xml postgresql

我需要从表格结果生成JSON / XML。在MS SQL Server中有内置函数:FOR XML AUTO

例如:

SELECT *
  FROM [Person] P
  LEFT JOIN CAR C ON P.id = C.PersonId
  FOR XML AUTO

因此我得到(开箱即用):

 <P id="1" Name="jan">
  <C id="1" Name="toyota" Type="osobowyu" PersonId="1" />
  <C id="2" Name="vw" Type="osobowyu" PersonId="1" />
</P>
<P id="2" Name="adam">
  <C id="3" Name="passat" Type="test" PersonId="2" />
</P>
<P id="3" Name="piotr">
  <C id="4" Name="kia" Type="test" PersonId="3" />
</P>

哪个很酷。我喜欢嵌套级别为每个JOIN自动显示。很酷的功能。

现在我想知道postgres DB是否有类似内容?

感谢任何提示。

1 个答案:

答案 0 :(得分:1)

不,Postgres没有任何相似之处。有完整的ANSI SQL / XML支持和部分ANSI SQL / JSON支持。当您需要ganerate XML文档时,可以使用XML生成函数,如:

postgres=# select * from person;
┌────┬───────┐
│ id │ name  │
╞════╪═══════╡
│  1 │ jan   │
│  2 │ piotr │
└────┴───────┘
(2 rows)

postgres=# select * from car;
┌────┬────────┬──────────┐
│ id │  name  │ personid │
╞════╪════════╪══════════╡
│  1 │ toyota │        1 │
│  2 │ vw     │        1 │
│  3 │ kia    │        2 │
└────┴────────┴──────────┘
(3 rows)
select xmlelement(name p, xmlattributes(p.id, p.name),
                  xmlagg(xmlelement(name c, xmlattributes(c.id,
                                                          c.name,
                                                          c.personid))))
    from person p join car c on p.id = c.personid
    group by p.id, p.name;
┌───────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            xmlelement                                             │
╞═══════════════════════════════════════════════════════════════════════════════════════════════════╡
│ <p id="1" name="jan"><c id="1" name="toyota" personid="1"/><c id="2" name="vw" personid="1"/></p> │
│ <p id="2" name="piotr"><c id="3" name="kia" personid="2"/></p>                                    │
└───────────────────────────────────────────────────────────────────────────────────────────────────┘

(2行)