如何查询XML列转换为行

时间:2019-06-21 09:42:29

标签: sql

我有带有XML列的表。如何将XML列转换为行?

ModelC.objects.prefetch_related('ModelB__ModelA')

结果:

SELECT RECID, DATE, STARTED
FROM F_SERVICE

预期结果:

RECID | DATE                                         | STARTED
------+----------------------------------------------+-------------------------------------------------------------------
COB   | <c15>20190122</c15><c15 m="2">20190121</c15> | <c16>02/04/2019 22:06:37</c16><c16 m="2">02/04/2019 22:02:41</c16>

1 个答案:

答案 0 :(得分:0)

如果您使用的是Oracle数据库,则可以使用xmltable函数将XML列转换为这样的行:

SELECT t1.recid
    ,t1.cob_pos
    ,t1.cob_date
    ,t2.cob_time
FROM (
    SELECT t.recid
        ,xt.cob_date
        ,nvl(xt.cob_pos, 1) cob_pos
    FROM myTable t
        ,XMLTABLE('/row/c15' passing t.xml_column columns cob_date VARCHAR(8) path '/', cob_pos VARCHAR(3) path '@m') xt
    ) t1
JOIN (
    SELECT t.recid
        ,xt.cob_time
        ,nvl(xt.cob_pos, 1) cob_pos
    FROM myTable t
        ,XMLTABLE('/row/c16' passing t.xml_column columns cob_time VARCHAR(50) path '/', cob_pos VARCHAR(3) path '@m') xt
    ) t2 ON t1.recid = t2.recid
    AND t1.cob_pos = t2.cob_pos
ORDER BY t1.recid

您基本上创建了两个表,一个表包含id和日期,另一个表包含id和时间。然后将它们加入ID和记录的位置。