【解決方法】SQLで同じ名前の子ノードを持つXML文字列を解析するには?


SQL のテーブルからフェッチしているときに、同じ名前の子ノードを持つ xml 文字列を解析したいと考えています。 以下は xml 文字列で、DebitAccountnumber ノードの値を取得したいと考えています。 以下のフェッチクエリは、個別のノード名に対してのみ機能します

My xml string is as below:
<pre><HB_EAI_REQUEST>
   <HB_EAI_HEADER>
      <MsgFormat>SETTLEMENT.POSTING</MsgFormat>
      <MsgVersion>0000</MsgVersion>
      <RequestorId>HB</RequestorId>
      <RequestorChannelId>DDS</RequestorChannelId>
      <RequestorUserId>00379</RequestorUserId>
      <RequestorLanguage>E</RequestorLanguage>
      <RequestorSecurityInfo>RequestorSecurityInfo</RequestorSecurityInfo>
      <EaiReference>0</EaiReference>
      <ReturnCode>0000</ReturnCode>
   </HB_EAI_HEADER>
   <Request>
      <SettlementPostingRequest>
         <ReferenceNum>IPOS071122000989</ReferenceNum>
         <DebitAccount>
            <DebitAccountNo>028676488148</DebitAccountNo>
            <DebitAmount>100000</DebitAmount>
            <DebitNarration>Net Settlement 11.11.22</DebitNarration>
         </DebitAccount>
         <DebitAccount>
            <DebitAccountNo>AED1281000020002</DebitAccountNo>
            <DebitAmount>100000</DebitAmount>
            <DebitNarration>Mirror Ac 11.11.22;</DebitNarration>
         </DebitAccount>
         <CreditAccount>
            <CreditAccountNo>020900001046</CreditAccountNo>
            <CreditAmount>200000</CreditAmount>
            <CreditNarration>Net Settlement 11.11.22</CreditNarration>
         </CreditAccount>
         <BranchCode />
         <TimeStamp>20221107161306660</TimeStamp>
         <SourceSystem>L</SourceSystem>
      </SettlementPostingRequest>
   </Request>
</HB_EAI_REQUEST>

私が試したこと:

テストから CAST(CAST(REQ.MQXMLdata AS XML).query(‘data(/*/Request/DebitAccount/DebitAccountNo)’) AS VARCHAR(50)) AS DebitAccountNumber を選択します

解決策 1

あなたのクエリはサンプル XML では機能しません。 DebitAccount ノードは の直接の子ではありません Request ノード。

クエリを変更して、ノードへの正しいパスを指定します。

SQL
select CAST(CAST(REQ.MQXMLdata AS XML).query('data(/*/Request/SettlementPostingRequest/DebitAccount/DebitAccountNo)') AS VARCHAR(50)) AS DebitAccountNumber from test 

コメント

タイトルとURLをコピーしました