實例詳述FOR XML PATH用法

 

語句SELECT * FROM MEMBER查詢出來結果如上圖所示,現加入FOR XML PATH看下會有什麼變化,語句如下: 

SELECT * FROM MEMBER FOR XML PATH

 

 點擊進入可查詢詳細情況

 

 

由此可見,FOR XML PATH 是可以將查詢結果以XML格式輸出。

那麼,我們可以自定義節點嗎?先試試

SELECT * FROM MEMBER FOR XML PATH ('m')

 

 結果顯示行節點變成了<m>,既然可以修改,那當然path()內的值可以修改成其他值。

如果是這樣path('')則表示去掉行節點。

那列節點呢?回顧下SELECT  *或 SELECT 列名 ,那也就是說可以從這裏改變它

SELECT 編號 BH , 姓名 XM, 性別 sex,年齡 age ,愛好 AH FROM MEMBER FOR XML PATH ('m')

 

 

 

 但上面這樣輸出的形式還不是我們想要看到的,怎麼能把一些符號可以去掉呢?

讓我們自定義輸出,語句如下:

SELECT '[' 愛好 ']' FROM MEMBER FOR XML PATH('')

輸出結果:

 

 因爲path('')值爲空,所以結果只會顯示一行一個值記錄

如果是int數據類型,如年齡,需要轉換成字符串

SELECT '[' cast(年齡 as nvarchar) ']', '[' 愛好 ']'  FROM MEMBER FOR XML PATH ('')

 

 FOR XML PATH基本使用就介紹到這裏,下面看下如何運用

二、結合GROUP BY 實際應用,要求按下圖方式顯示

 

 分析下看如何運用,除了與GROUP BY 結合使用外還用到STUFF函數,當然也可以用LEFT等函數,我這裏只簡單介紹STUFF函數的使用

STUFF函數作用:刪除指定長度的字符,或在指定的起點處插入另一組字符。

STUFF ( character_expression , start , length , replaceWith_expression )

 

 

select a.編號,a.姓名,愛好=(select ',' 愛好 from member where 編號=a.編號 for xml path(''))  from member a group by a.編號,a.姓名

 

 

 

現在要想辦法去掉“愛好”列的第一個逗號,此時用到STUFF函數

 

select a.編號,a.姓名,愛好=STUFF((select ',' 愛好 from member where 編號=a.編號 for xml path('')),1,1,'') from member a GROUP BY a.編號,a.姓名

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章