Sql Server數(shù)據(jù)把列根據(jù)指定內(nèi)容拆分?jǐn)?shù)據(jù)的方法實(shí)例
今天由于工作需要,需要把數(shù)據(jù)把列根據(jù)指定的內(nèi)容拆分?jǐn)?shù)據(jù)
其中一條數(shù)據(jù)實(shí)例
select id , XXXX FROM BIZ_PAPER where id ='4af210ec675927fa016772bf7dd025b0'
拆分方法:
select t3.id ,t3.XXXX as XXXX from ( select A.id , B.XXXX from ( SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER) A outer apply( SELECT XXXX = N.v.value('.', 'varchar(100)') FROM A.XXXX .nodes('/root/v') N(v)) B) t3 where t3.id ='4af210ec675927fa016772bf7dd025b0'
結(jié)果
在自己研究這行代碼之后,做出如下講解,如果有錯(cuò)誤的地方還請指教
SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER
這一行的重點(diǎn)在于CONVERT,XML是指類型,xml 數(shù)據(jù)類型實(shí)例拆分為關(guān)系數(shù)據(jù),則 nodes() 方法非常有用,至于XML類型的數(shù)據(jù),我后面進(jìn)行補(bǔ)充
REPLACE 指按照 ' , ' 進(jìn)行替換,并且按照指定的內(nèi)容進(jìn)行拼接
最后的結(jié)果為
outer apply
這個(gè)就是表的關(guān)聯(lián),就像是left join ,但是沒有on 作為關(guān)聯(lián)條件,所以通過拆分之后多出來的數(shù)據(jù)就是通過這個(gè)進(jìn)行關(guān)聯(lián)后產(chǎn)生的
SELECT XXXX = N.v.value('.', 'varchar(100)') FROM A.XXXX .nodes('/root/v') N(v)
N.v.value('.','varchar(100)'),N是表,別名,v是列,value函數(shù)是讀取標(biāo)簽之間的值,對于這個(gè)列子,讀取的為<v>和</v>中間的值;這個(gè)可以去了解 xml類型的常用的三個(gè)方法 :value()、nodes()、exist()
value的第一個(gè)參數(shù)是一個(gè)字符串文字,從 XML 實(shí)例內(nèi)部檢索數(shù)據(jù)。 XQuery 必須最多返回一個(gè)值。 否則,將返回錯(cuò)誤;
value的第二個(gè)參數(shù)是指將查詢結(jié)果轉(zhuǎn)化為何種類型的數(shù)據(jù)。
此處,'.'表示當(dāng)前目錄,即<v>目錄,另外'..'表示上級目錄,'/'表示根目錄,這個(gè)跟Linux是一樣的
總的來說,這個(gè)語句的重點(diǎn)在于xml類型的使用和outer apply的使用,其他的都很好理解。這個(gè)就是我自己理解后的講解,部分位置我自己也還沒有理解透
總結(jié)
到此這篇關(guān)于Sql Server數(shù)據(jù)把列根據(jù)指定內(nèi)容拆分?jǐn)?shù)據(jù)的文章就介紹到這了,更多相關(guān)SqlServer數(shù)據(jù)列根據(jù)內(nèi)容拆分?jǐn)?shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver 快速生成漢字的首拼字母的函數(shù)(經(jīng)典)
經(jīng)常要對姓名按拼音搜索,所以需要做如下函數(shù)來快速獲取首拼,需要的朋友可以參考下2012-05-05SQLServer 2000 數(shù)據(jù)庫同步詳細(xì)步驟[兩臺服務(wù)器]
成功實(shí)現(xiàn)SQL Server 2000 數(shù)據(jù)庫同步[一臺服務(wù)器,一臺動(dòng)態(tài)IP的備份機(jī)],詳細(xì)步驟說明。2010-07-07sql將一個(gè)表中的數(shù)據(jù)插入到另一個(gè)表中的方法
這篇文章主要介紹了sql將一個(gè)表中的數(shù)據(jù)插入到另一個(gè)表中的方法,需要的朋友可以參考下2014-03-03sqlserver通用的刪除服務(wù)器上的所有相同后綴的臨時(shí)表
因?yàn)轫?xiàng)目需要,必須使用大量臨時(shí)表,因此編寫批量刪除臨時(shí)表的通用語句2012-05-05SQL?server插入報(bào)錯(cuò):當(dāng)?IDENTITY_INSERT?設(shè)置為?OFF?時(shí)不能為表?‘XXX‘?
這篇文章主要介紹了SQL?server插入報(bào)錯(cuò):當(dāng)?IDENTITY_INSERT?設(shè)置為?OFF?時(shí),不能為表?‘XXX‘?中的標(biāo)識列插入顯式值的問題,該問題是給SQL server數(shù)據(jù)庫中的某個(gè)表插入數(shù)據(jù)引起的報(bào)錯(cuò),一般出現(xiàn)在該表為自增的情況下,本文給大家分享解決方法,需要的朋友可以參考下2023-09-09sqlserver 手工實(shí)現(xiàn)差異備份的步驟
sqlserver 手工實(shí)現(xiàn)差異備份的步驟,需要的朋友可以參考下。2011-04-0410種Java開發(fā)者編寫SQL語句時(shí)常見錯(cuò)誤
這篇文章主要介紹了10種Java開發(fā)者編寫SQL語句時(shí)常見錯(cuò)誤,當(dāng)Java開發(fā)人員編寫SQL語句時(shí),一切都變得不同了。SQL是一種說明式語言,與面向?qū)ο笏枷牒兔钍剿枷霟o關(guān),需要的朋友可以參考下2015-08-08sqlserver給表添加新字段、給表和字段添加備注、更新備注及查詢備注(sql語句)
這篇文章主要介紹了sqlserver給表添加新字段、給表和字段添加備注、更新備注及查詢備注,文中給大家介紹了Sqlserver新增帶備注字段的語句,需要的朋友可以參考下2022-10-10SQL參數(shù)化查詢的另一個(gè)理由 命中執(zhí)行計(jì)劃
為了提高數(shù)據(jù)庫運(yùn)行的效率,我們需要盡可能的命中執(zhí)行計(jì)劃,這樣就可以節(jié)省運(yùn)行時(shí)間2012-08-08