国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FOR XML PATH 函數(shù)與同一分組下的字符串拼接

這篇具有很好參考價(jià)值的文章主要介紹了FOR XML PATH 函數(shù)與同一分組下的字符串拼接。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

FOR XML PATH 簡(jiǎn)單介紹

FOR XML PATH 語句是將查詢結(jié)果集以XML形式展現(xiàn),通常情況下最常見的用法就是將多行的結(jié)果,拼接展示在同一行。
首先新建一張測(cè)試表并插入數(shù)據(jù):

CREATE TABLE #Test (
    Name varchar(70),
    Hobby varchar(70)
);

insert #Test
select '張三','游泳' union
select '張三','爬山' union
select '張三','游戲' union
select '李四','唱歌' union
select '李四','睡覺' 

select * from #Test;

查詢結(jié)果如下:
FOR XML PATH 函數(shù)與同一分組下的字符串拼接,SQL,xml,數(shù)據(jù)庫,sql
接下來應(yīng)用FOR XML PATH的查詢結(jié)果語句如下:

SELECT * FROM #Test FOR XML PATH

在查詢結(jié)果中會(huì)出現(xiàn)一個(gè)可點(diǎn)擊的XML鏈接,點(diǎn)擊后結(jié)果如下:

<row>
  <Name>李四</Name>
  <Hobby>唱歌</Hobby>
</row>
<row>
  <Name>李四</Name>
  <Hobby>睡覺</Hobby>
</row>
<row>
  <Name>張三</Name>
  <Hobby>爬山</Hobby>
</row>
<row>
  <Name>張三</Name>
  <Hobby>游戲</Hobby>
</row>
<row>
  <Name>張三</Name>
  <Hobby>游泳</Hobby>
</row>

可見FOR XML PATH 可以將查詢后結(jié)果根據(jù)行輸出成XML格式。那么變?yōu)閄ML格式有什么好處呢?我們一般在使用select 列 from 表語句時(shí)查詢出來的結(jié)果都是按照列輸出的,如果要得到列中的一個(gè)數(shù)據(jù)就需要加各種篩選條件。而XML格式可以通過<>中的節(jié)點(diǎn)來篩選出數(shù)據(jù),從而由select語句的列級(jí)別操作變?yōu)轭愃朴贓xcel基于行列定位的單元格級(jí)別操作

FOR XML PATH應(yīng)用

1.分組拼接

如果要顯示所有人的愛好的結(jié)果集,并且要每個(gè)人的所有興趣顯示在一行中,代碼如下:

SELECT 
Name,
STUFF((SELECT ','+Hobby FROM #Test WHERE Name=T.Name FOR XML PATH('')),1,1,'') AS All_Hobby  
FROM #Test T GROUP BY T.Name

結(jié)果如下:
FOR XML PATH 函數(shù)與同一分組下的字符串拼接,SQL,xml,數(shù)據(jù)庫,sql
對(duì)上述語句逐步分析一下,首先看這句:

SELECT ','+Hobby FROM #Test WHERE Name=T.Name FOR XML PATH('')

這句是通過FOR XML PATH 將某一姓名如張三的愛好,顯示成格式為:“ ,愛好1,愛好2,愛好3,…”的格式,WHERE Name=T.Name這一個(gè)條件用來判斷篩選對(duì)應(yīng)姓名的愛好,如果沒有WHERE Name=T.Name這一個(gè)條件的話就會(huì)連接整個(gè)表中所有的愛好,無法分組

接著用STUFF函數(shù)將拼接完成后字符第一個(gè)’,'替換成空,STUFF函數(shù)第一個(gè)參數(shù)為要操作的字符串,第二個(gè)為從第幾個(gè)開始替換下標(biāo)從1開始,第三個(gè)參數(shù)為替換的個(gè)數(shù),第四個(gè)參數(shù)為替換的字符)
簡(jiǎn)單舉幾個(gè)例子:

select STUFF('abc',1,1,'*') 執(zhí)行結(jié)果為:*abc
select STUFF('abc',1,0,'*') 執(zhí)行結(jié)果為:*bc
select STUFF('abc',2,2,'*') 執(zhí)行結(jié)果為:a**

最終輸出上述按照姓名分組后每個(gè)人對(duì)應(yīng)的愛好

在MySQL 中可以用group_concat這個(gè)函數(shù)來實(shí)現(xiàn)這一功能

多行數(shù)據(jù)拼接

FOR XML PATH可以實(shí)現(xiàn)對(duì)一列中多行數(shù)據(jù)進(jìn)行拼接,可以使用行節(jié)點(diǎn)與列節(jié)點(diǎn)并自定義輸出格式:

-- 還可以通過符號(hào)+號(hào)來對(duì)字符串類型字段的輸出格式進(jìn)行修改
SELECT '[ '+Hobby+' ]' FROM #Test FOR XML PATH('')
--輸出結(jié)果為: [ 唱歌 ][ 睡覺 ][ 爬山 ][ 游戲 ][ 游泳 ]


--如有其他數(shù)據(jù)類型的列轉(zhuǎn)換成字符串類型再拼接
SELECT '{'+STR(ID)+'}','[ '+Hobby+' ]' FROM #Test FOR XML PATH('')

JSON格式輸出

STUFF結(jié)合FOR XML PATH可以用來拼接JSON字符串,

select '['+ stuff((select ',{"name": "' + name + '","subjects": "' + Hobby + '"}'
from #Test for xml path('')),1,1,'') +']'
--[{"name": "李四","subjects": "唱歌"},{"name": "李四","subjects": "睡覺"},{"name": "張三","subjects": "爬山"},{"name": "張三","subjects": "游戲"},{"name": "張三","subjects": "游泳"}]

節(jié)點(diǎn)名稱的修改

再來看一下如何改變XML行節(jié)點(diǎn)名稱,如果我們想修改對(duì)應(yīng)數(shù)據(jù)的節(jié)點(diǎn)名稱,代碼如下:

SELECT * FROM  #Test  FOR XML PATH('MyHobby')

運(yùn)行后輸出結(jié)果把原來的行節(jié)點(diǎn) 變成了在PATH后面括號(hào)()中自定義的名稱,結(jié)果如下:

<MyHobby>
  <Name>李四</Name>
  <Hobby>唱歌</Hobby>
</MyHobby>
<MyHobby>
  <Name>李四</Name>
  <Hobby>睡覺</Hobby>
</MyHobby>
<MyHobby>
  <Name>張三</Name>
  <Hobby>爬山</Hobby>
</MyHobby>
<MyHobby>
  <Name>張三</Name>
  <Hobby>游戲</Hobby>
</MyHobby>
<MyHobby>
  <Name>張三</Name>
  <Hobby>游泳</Hobby>

那么列節(jié)點(diǎn)如何改變呢?可以使用關(guān)鍵字AS修改列節(jié)點(diǎn)名稱,代碼如下:

SELECT Name as 'MyName',Hobby as 'MyHobby' FROM #Test FOR XML PATH('MyHobby')

結(jié)果如下:

<MyHobby>
  <MyName>李四</MyName>
  <MyHobby>唱歌</MyHobby>
</MyHobby>
<MyHobby>
  <MyName>李四</MyName>
  <MyHobby>睡覺</MyHobby>
</MyHobby>
<MyHobby>
  <MyName>張三</MyName>
  <MyHobby>爬山</MyHobby>
</MyHobby>
<MyHobby>
  <MyName>張三</MyName>
  <MyHobby>游戲</MyHobby>
</MyHobby>
<MyHobby>
  <MyName>張三</MyName>
  <MyHobby>游泳</MyHobby>
</MyHobby>

參考文章:
https://www.cnblogs.com/yasuo2/p/6433697.html
FOR XML PATH 函數(shù)與同一分組下的字符串拼接,SQL,xml,數(shù)據(jù)庫,sql文章來源地址http://www.zghlxwxcb.cn/news/detail-819275.html

到了這里,關(guān)于FOR XML PATH 函數(shù)與同一分組下的字符串拼接的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • .Net 中實(shí)體類轉(zhuǎn)換為XML字符串, 確保字符串頭部是utf-8 不是utf-16

    使用 Utf8StringWriter 或類似的方法來確保在序列化過程中使用正確的編碼。然而, Utf8StringWriter 不是.NET Core或.NET Standard庫的一部分,因此你需要自己實(shí)現(xiàn)一個(gè)。 不過,有一種更簡(jiǎn)單的方法可以達(dá)到相同的效果,那就是使用 StringWriter 與 Encoding.GetEncoding(\\\"utf-8\\\") 結(jié)合,但這實(shí)際上

    2024年01月23日
    瀏覽(32)
  • 【項(xiàng)目學(xué)習(xí)1】如何將java對(duì)象轉(zhuǎn)化為XML字符串

    【項(xiàng)目學(xué)習(xí)1】如何將java對(duì)象轉(zhuǎn)化為XML字符串

    將java對(duì)象轉(zhuǎn)化為XML字符串,可以使用Java的XML操作庫JAXB,具體操作步驟如下: 主要分為以下幾步: 1、創(chuàng)建JAXBContext對(duì)象,用于映射Java類和XML。 2、創(chuàng)建Marshaller對(duì)象,用于將Java對(duì)象序列化為XML。 3、配置Marshaller參數(shù),例如設(shè)置XML輸出格式、是否格式化輸出等。 4、調(diào)用Marsha

    2024年02月14日
    瀏覽(25)
  • 【JavaSE專欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    【JavaSE專欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    作者主頁 :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開發(fā)經(jīng)驗(yàn),專注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 XML 的概念,以及 Java 中 XML 和字符串的轉(zhuǎn)換方法,并給出了樣例代碼。

    2024年02月09日
    瀏覽(32)
  • C語言:字符函數(shù)和字符串函數(shù)(一篇拿捏字符串函數(shù)!)

    C語言:字符函數(shù)和字符串函數(shù)(一篇拿捏字符串函數(shù)!)

    目錄 求字符串長度: 1. strlen(字符串長度) 長度不受限制函數(shù): 2. strcpy(字符串拷貝) 3. strcat(字符串追加) 4. strcmp(字符串比較) 長度受限制函數(shù): 5. strncpy(字符串拷貝) 6. strncat(字符串追加) 7. strncmp(字符串比較) 字符串查找: 8. strstr(查找字符串子串) 9. strtok(字符串分割) 錯(cuò)誤信

    2024年02月10日
    瀏覽(95)
  • 字符函數(shù)和字符串函數(shù)

    字符函數(shù)和字符串函數(shù)

    C語言中對(duì)字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常放在 常量字符串 中或者 字符數(shù)組 中。 字符串常量 適用于那些對(duì)它不做修改的字符串函數(shù). 字符串已經(jīng) \\\'\\0\\\' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 \\\'\\0\\\' 前面出現(xiàn)的字符個(gè)數(shù)(不包

    2024年02月07日
    瀏覽(86)
  • 字符串函數(shù)和字符函數(shù)

    字符串函數(shù)和字符函數(shù)

    在C語言中,我們經(jīng)常會(huì)遇到字符串的處理,我們要是每當(dāng)用到字符串總要自己寫函數(shù)去解決問題的時(shí)候,未免有些麻煩,所以在這里我們可以調(diào)用庫中的 “ string.h \\\" 的頭函數(shù)來解決問題;下面就對(duì)一些經(jīng)常使用的字符函數(shù)和字符串函數(shù)進(jìn)行使用講解和函數(shù)解析; size_t strle

    2024年02月15日
    瀏覽(19)
  • 字符函數(shù)和字符串函數(shù)(2)

    ? 目錄 memcpy memmove memcmp 1.函數(shù)memcpy從source的位置開始向后 復(fù)制num個(gè)字節(jié) 的數(shù)據(jù)到destination的內(nèi)存位置。 2.這個(gè)函數(shù)在遇到 \\\'\\0\\\' 的時(shí)候并不會(huì)停下來。 3.如果source和destination有任何的重疊,復(fù)制的結(jié)果都是未定義的。 memcpy是內(nèi)存拷貝,拷貝字符串、整形數(shù)組、結(jié)構(gòu)體數(shù)據(jù)。

    2024年02月10日
    瀏覽(19)
  • 【C語言】字符函數(shù),字符串函數(shù),內(nèi)存函數(shù)

    【C語言】字符函數(shù),字符串函數(shù),內(nèi)存函數(shù)

    大家好!今天我們來學(xué)習(xí)C語言中的字符函數(shù),字符串函數(shù)和內(nèi)存函數(shù)。 目錄 1. 字符函數(shù) 1.1 字符分類函數(shù) 1.2 字符轉(zhuǎn)換函數(shù) 1.2.1 tolower(將大寫字母轉(zhuǎn)化為小寫字母) 1.2.2 toupper(將小寫字母轉(zhuǎn)化為大寫字母) 2. 字符串函數(shù) 2.1 字符串輸入函數(shù) 2.1.1 gets() ?2.1.2 fgets() 2.2 字符串

    2024年02月10日
    瀏覽(27)
  • C/C++字符函數(shù)和字符串函數(shù)詳解————長度受限制的字符串函數(shù)

    C/C++字符函數(shù)和字符串函數(shù)詳解————長度受限制的字符串函數(shù)

    個(gè)人主頁:點(diǎn)我進(jìn)入主頁 專欄分類:C語言初階? ? ??C語言程序設(shè)計(jì)————KTV? ? ? ?C語言小游戲? ? ?C語言進(jìn)階 C語言刷題 歡迎大家點(diǎn)贊,評(píng)論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言? ? ? ?? 2.長度受限制的字符串函數(shù) 2.1strncpy函數(shù) 2.2strncat函數(shù) 2.3strncmp函數(shù)

    2024年02月08日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包