簡體   English   中英

如何連接SQL Server XML查詢中的數據?

[英]How to concatenate data from a SQL Server XML query?

我有一個SQL查詢,它返回下面的XML

<row>
  <urlSegment>electronics</urlSegment>
  <shortenedUrlSegment>0x58</shortenedUrlSegment>
</row>
<row>
  <urlSegment>phones</urlSegment>
  <shortenedUrlSegment>0x5AC0</shortenedUrlSegment>
</row>
<row>
  <urlSegment>curvy-simplicity</urlSegment>
  <shortenedUrlSegment>65546</shortenedUrlSegment>
</row>

等等

我想要的輸出是一個包含兩列(Url和ShortenedUrl)的表,其中數據以url方式連接,如下所示。

Url                                  | ShortenedUrl
electronics/phones/curvy-simplicity  | 0x58/0x5AC0/65546

等等

有人可以幫忙嗎?

最好的問候

你可以像這樣使用xquery:

select
    stuff(
        @data.query('
            for $i in row/urlSegment return <a>{concat("/", $i)}</a>
        ').value('.', 'varchar(max)')
    , 1, 1, '') as Url,
    stuff(
        @data.query('
            for $i in row/shortenedUrlSegment return <a>{concat("/", $i)}</a>
        ').value('.', 'varchar(max)')
    , 1, 1, '') as ShortenedUrl

sql小提琴演示

試試這個:

DECLARE @input XML

SET @input = '<row>
  <urlSegment>electronics</urlSegment>
  <shortenedUrlSegment>0x58</shortenedUrlSegment>
</row>
<row>
  <urlSegment>phones</urlSegment>
  <shortenedUrlSegment>0x5AC0</shortenedUrlSegment>
</row>
<row>
  <urlSegment>curvy-simplicity</urlSegment>
  <shortenedUrlSegment>65546</shortenedUrlSegment>
</row>'

SELECT
    Url = XRow.value('(urlSegment)[1]', 'varchar(100)'),
    ShortenedUrl =XRow.value('(shortenedUrlSegment)[1]', 'varchar(100)')
FROM
    @input.nodes('/row') AS XTbl(XRow)

.nodes()為您提供了一系列XML片段,一個用於XML中的每個<row>節點。 然后你可以“進入”那個<row>元素並剔除包含的子元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM