【发布时间】:2019-12-05 19:08:09
【问题描述】:
我需要解析下面显示的代码中包含的 XML 数据。请问 SELECT 语句后面的五行代码应该是什么?
我已阅读 Frederic Brouard 等人在 SQL Server 2014 中关于 XML 的部分。根据这篇阅读,我尝试在五行代码中输入不同的内容,但它们不起作用。
DECLARE @ForexXML
SET @ForexXML = N'
<rates>
<date2019-07-23>
<USD>0.7605336601</USD>
</date2019-07-23>
<date2019-07-25>
<USD>0.7617709547</USD>
</date2019-07-25>
<date2019-07-26>
<USD>0.758719346</USD>
</date2019-07-26>
<date2019-07-24>
<USD>0.7616052506</USD>
</date2019-07-24>
<date2019-07-22>
<USD>0.7647459939</USD>
</date2019-07-22>
</rates>
<start_at>2019-07-20</start_at>
<base>CAD</base>
<end_at>2019-07-26</end_at>'
INSERT INTO dbo.destinationTable (Date, Base, Currency, Rate)
SELECT
Node.Dt.value('SUBSTRING(date[1], 5, 10)', 'DATE') AS Date,
Node.Dt.value('.', 'NVARCHAR(10)') AS Base,
Node.Dt.value('date[1]/@USD', 'NVARCHAR(20)') AS Currency,
Node.Dt.value('.', 'NVARCHAR(MAX)') AS Rate
FROM
@ForexXMLData.nodes('.') Node(Dt)
预期结果:
解析后的数据将进入一个包含以下四列的 SQL Server 表,每列都有显示的值:
Date Base Currency Rate
----------------------------------------------
2019-07-23 CAD USD 0.7605336601
2019-07-25 CAD USD 0.7617709547
2019-07-26 CAD USD 0.758719346
2019-07-24 CAD USD 0.7616052506
2019-07-22 CAD USD 0.7647459939
目前的实际结果:
Date Base Currency Rate
---------------------------------------------
1900-01-01 0.76053366 NULL 0.76053366010.76177095470.7587193460.76160525060.76474599392019-07-20CAD2019-07-26
【问题讨论】:
标签: xml tsql sql-server-2014