1. 程式人生 > 其它 >sql實現一列的多個結果合併成一個結果,並分割,使用xml for path

sql實現一列的多個結果合併成一個結果,並分割,使用xml for path

引用自:Sql Server 的FOR XML PATH(‘‘)函式用法_chpllp的部落格-CSDN部落格

1. 如下表:

2. 轉換xml

1

select name from zz FOR XML PATH('root');

1

ps: FOR XML PATH('root')中root是xml根節點。<br><br><br><br>

 3. 加個分隔符和去掉根節點。

1

select '、' + name from zz FOR XML PATH('');

 4. 配合stuff函式使用,去掉第一個分隔符號。

1

select STUFF((select '、' + name from zz FOR XML PATH('')),1,1,'');

5. STUFF ( character_expression , start , length ,character_expression ) 

  character_expression:字元資料

  start :指定刪除和插入的開始位置

  length :指定要刪除的字元數

  character_expression : 替換start 到 length 的字元資料

6. 轉義字元正常顯示

有時候我們的資料庫中有尖括號,然後有用到

xml的時候,sql會自動的把尖括號進行轉義,但是我們不需要轉義,並且對這個有要求要用到,這時候我們可以用value的形式來實現,測試資料:

  1.   --測試資料
  2.   if not object_id(N'Tempdb..#T') is null
  3.   drop table #T
  4.   Go
  5.   Create table #T([ID] int,[Chemistry] nvarchar(47))
  6.   Insert #T
  7.   select 1,N'CaF<sub>2</sub>' union all
  8.   select 2,N'Al<sub>2</sub>O<sub>3<?sub>'
  9.   Go
  10.   --測試資料結束

用for xml path讀取指標資訊

  1.   SELECT
  2.   STUFF((
  3.   Select ','+Chemistry from #T FOR XML PATH('')),1,1,'')

讀取的結果是這樣的:

我們看到尖括號已經進行了轉義,如果我們還想要尖括號,可以這樣寫:

  1.   SELECT
  2.   STUFF((
  3.   Select ','+Chemistry from #T FOR XML PATH(''),TYPE
  4.   ).value('.','NVARCHAR(MAX)')
  5.   ,1,1,'')

結果: