久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從 xml 數(shù)據(jù)中獲取逗號分隔值

get comma separated values from xml data(從 xml 數(shù)據(jù)中獲取逗號分隔值)
本文介紹了從 xml 數(shù)據(jù)中獲取逗號分隔值的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我知道如何在最簡單的情況下做到這一點,例如

I know how to do it in the simplest scenario, e.g.

DECLARE @commaSeparatedValues NVARCHAR(MAX)
DECLARE @xml XML = N'<id>1</id>
<name>test</name>
<istest>1</istest>'

;WITH nodes AS 
(
    SELECT Tbl.Col.value('.', 'nvarchar(max)') as Value
    FROM @xml.nodes('*/text()') Tbl(Col)
),
prepareStrings
AS
(
    SELECT IIF(ISNUMERIC(n.value) = 1, n.Value, '''' + n.Value + '''') AS Value
    FROM nodes n
)
SELECT @commaSeparatedValues = CASE WHEN @commaSeparatedValues IS NULL THEN s.Value ELSE @commaSeparatedValues + ',' + s.value END
FROM prepareStrings s

SELECT @commaSeparatedValues as csv

這完美地工作.當我想以這種方式解析以下 xml 數(shù)據(jù)時出現(xiàn)問題.我在編寫正確的查詢時遇到問題.

This works perfectly. Problem arises when I want to parse this way the following xml data. I have problems with writing the proper query.

DECLARE @xml XML = N'
<e>
  <id>1</id>
  <name>test</name>
  <istest>1</istest>
</e>
<e>
  <id>2</id>
  <name>test2</name>
  <istest>0</istest>
</e>
'

我可以通過使用逐行獲取元素

I can get the elements row by row by using

select Tbl.col.query('.') as [xml]
from @xml.nodes('e') Tbl(col)

我不知道如何向前推進.不知道如何使用這個查詢,現(xiàn)在查詢 [xml] 列.

What I don't know is how to move forward with this. Don't know how to use this query and now querying the [xml] column.

推薦答案

請嘗試下面的 SQL 查詢

Please try the below SQL query

DECLARE @commaSeparatedValues NVARCHAR(MAX)
DECLARE @xml XML = N'
<e>
  <id>1</id>
  <name>test1</name>
  <istest>1</istest>
</e>
<e>
  <id>2</id>
  <name>test2</name>
  <istest>2</istest>
</e>
'

;with cte as (
    select 
        rownr = ROW_NUMBER() over (order by @commaSeparatedValues),
        Tbl.col.query('.') as [xml]
    from @xml.nodes('e') Tbl(col)
), cols as (
    select
        rownr,
        Tbl.Col.value('.', 'nvarchar(max)') as Value
    from cte
    cross apply cte.xml.nodes('//text()') Tbl(Col)
)
select distinct 
     STUFF((
       SELECT ',' + IIF(ISNUMERIC(value) = 1, Value, '''' + Value + '''')
       FROM cols SSF WHERE SSF.rownr = S.rownr
       FOR XML PATH(''),TYPE
       ).value('.','VARCHAR(MAX)'
     ), 1, 1, '')
    from cols S

我使用 SQL row_number()作用對記錄進行編號,區(qū)分列值時區(qū)分列值(第二個CTE使用Partition By子句對行數(shù)據(jù)中的列進行排序)

I use SQL row_number() function to number records and distinguish column values when they are separated into values (the second CTE uses Partition By clause to sort columns among row data)

然后我使用 SQL 字符串連接 使用 XML PATH() 的方法

Then I concatenate string values into comma separated string using SQL string concatenation method with using XML PATH()

希望能幫到你

這篇關(guān)于從 xml 數(shù)據(jù)中獲取逗號分隔值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉(zhuǎn)換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創(chuàng)建視圖?)
Create calculated value based on calculated value inside previous row(根據(jù)前一行內(nèi)的計算值創(chuàng)建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發(fā)技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉(zhuǎn)換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 九九热九九 | 99久久婷婷国产亚洲终合精品 | 亚洲欧洲精品成人久久奇米网 | 国产精品久久久久久久免费观看 | 日美女逼逼 | 国产性生活一级片 | 国产 日韩 欧美 在线 | 日韩av在线一区 | 亚洲一区二区精品视频 | 黄色精品视频网站 | 久久久久久免费免费 | 日本污视频 | 91精品国产综合久久久久蜜臀 | 欧美一级久久 | 亚洲视频免费在线看 | 国产精品免费一区二区三区四区 | 国产精品一区二区三区久久 | a天堂在线| 国产精品99久久久久久久vr | 欧美群妇大交群中文字幕 | 99精品视频在线 | 成人欧美一区二区 | 在线免费黄色小视频 | 一区在线观看视频 | 亚洲精品久久视频 | 国产美女福利在线观看 | 狠狠干美女 | 欧美一区二区另类 | 国产专区视频 | 最新中文字幕在线 | 欧美亚洲视频在线观看 | 日韩中文电影 | 国产精品一区二区欧美黑人喷潮水 | 中文字幕一区二区三区精彩视频 | 亚洲444kkkk在线观看最新 | 天天天天天操 | 91色在线 | 华丽的挑战在线观看 | 完全免费av在线 | 国产精品一区二区三区99 | 激情久久av一区av二区av三区 |