我有带有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>
答案 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和记录的位置。