[英]Filtering XML with SQL
我正在使用BPM並提取了一個大的xml文件,現在我想使用SQL對其進行過濾。 我想對其進行過濾,以便僅提取“角色類型”為101的Contractrole子對象。我的xml格式如下:
<contract>
<ContractRole>
<ContractId>xxxgg</ContractId>
<RoleType>104</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
<ContractRole>
<ContractId>xxxaa</ContractId>
<RoleType>100</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
<ContractRole>
<ContractId>xxxdd</ContractId>
<RoleType>101</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
<contract>
我該如何過濾掉除101以外的其他角色類型的條目? 我幾乎沒有SQL經驗,但是我希望使用SELECT語句,而WHERE角色類型是101。我可以在直接調用數據庫時輕松地做到這一點,但是在這里我需要從XML中提取相同的信息。
在線上的一個隨機示例提出了一些建議:
SELECT child.value('(LastUpdate/text())[1]', 'TIMESTAMP') AS [LastUpdateDate]
, child.value('(ContractId/text())[1]', 'BIGINT') AS [Id]
FROM [Contract] AS T
CROSS APPLY [ImportData].nodes('/Contract/ContractRole[RoleType/text() == "101"]') AS ImportData(child)
有人可以澄清一下如何進行此篩選。 在選擇任何內容之前,是否需要為xml命名一個名稱,或者它如何工作?
假設這是SqlServer
,並且Xml
中有一個松散變量(否則您需要對表進行CROSS APPLY,但是形式是相同的( 請看這里以直接從磁盤使用Xml列或Xml文件) 。一些注意事項:
contract
和Contract
不相同 =
相等 BIGINT
和日期類型之一(例如DATETIME
似乎更適合到xml的類型映射。 contract
結束標簽錯字。 SELECT node.value('(LastUpdateDate/text())[1]', 'DATETIME') AS [LastUpdateDate]
, node.value('(ContractId/text())[1]', 'VARCHAR(20)') AS [Id]
FROM @x.nodes('/contract/ContractRole[RoleType/text() = "101"]') AS nodes(node);
我假設以下內容:
DECLARE @x XML =
'<contract>
<ContractRole>
<ContractId>xxxgg</ContractId>
<RoleType>104</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
<ContractRole>
<ContractId>xxxaa</ContractId>
<RoleType>100</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
<ContractRole>
<ContractId>xxxdd</ContractId>
<RoleType>101</RoleType>
<LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
</ContractRole>
</contract>';
退貨
LastUpdateDate Id
----------------------- --------------------
2014-04-01 12:34:12.840 xxxdd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.