在SQL Server 2017中分解XML

给出以下SQL:

someMethod = () => {
  this.setState(({name}) => {
    name += " 0";
    return { name };
  }
};

我正在尝试获得这样的输出:

drop table if exists #testXML

create table #testXML (InputXML xml)

insert into #testXML
values ('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<document>
<table name="tableName1">
<column name="ID">000010313500011171011710001 </column>
<column name="StartDate">10/27/2019</column>
<column name="EndDate">11/02/2019</column>
</table>
</document>')

这是我的起点,但是我现在还处于挣扎状态。

ID                                 StartDate     EndDate
000010313500011171011710001        10/27/2019    11/02/2019

这是在SQL Server 2017上。

alexisyuan 回答:在SQL Server 2017中分解XML

您需要通过利用@name属性值来对SQL进行如下调整。

  

SQL

-- DDL and sample data population,start
DECLARE @tbl TABLE (InputXML xml)

INSERT INTO @tbl (InputXML)
VALUES ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<document>
    <table name="tableName1">
        <column name="ID">000010313500011171011710001</column>
        <column name="StartDate">10/27/2019</column>
        <column name="EndDate">11/02/2019</column>
    </table>
</document>');
-- DDL and sample data population,end

SELECT col.value('(column[@name="ID"]/text())[1]','nvarchar(50)') as ID,col.value('(column[@name="StartDate"]/text())[1]','DATE') as StartDate,col.value('(column[@name="EndDate"]/text())[1]','DATE') as EndDate
FROM @tbl tbl
    CROSS APPLY tbl.InputXML.nodes('/document/table') AS tab(col);
  

输出

+-----------------------------+------------+------------+
|             ID              | StartDate  |  EndDate   |
+-----------------------------+------------+------------+
| 000010313500011171011710001 | 2019-10-27 | 2019-11-02 |
+-----------------------------+------------+------------+
本文链接:https://www.f2er.com/3078810.html

大家都在问