Sql Server數(shù)據(jù)把列根據(jù)指定內(nèi)容拆分?jǐn)?shù)據(jù)的方法實例
今天由于工作需要,需要把數(shù)據(jù)把列根據(jù)指定的內(nèi)容拆分?jǐn)?shù)據(jù)
其中一條數(shù)據(jù)實例
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é)果
在自己研究這行代碼之后,做出如下講解,如果有錯誤的地方還請指教
SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER
這一行的重點在于CONVERT,XML是指類型,xml 數(shù)據(jù)類型實例拆分為關(guān)系數(shù)據(jù),則 nodes() 方法非常有用,至于XML類型的數(shù)據(jù),我后面進(jìn)行補充
REPLACE 指按照 ' , ' 進(jìn)行替換,并且按照指定的內(nèi)容進(jìn)行拼接
最后的結(jié)果為
outer apply
這個就是表的關(guān)聯(lián),就像是left join ,但是沒有on 作為關(guān)聯(lián)條件,所以通過拆分之后多出來的數(shù)據(jù)就是通過這個進(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)簽之間的值,對于這個列子,讀取的為<v>和</v>中間的值;這個可以去了解 xml類型的常用的三個方法 :value()、nodes()、exist()
value的第一個參數(shù)是一個字符串文字,從 XML 實例內(nèi)部檢索數(shù)據(jù)。 XQuery 必須最多返回一個值。 否則,將返回錯誤;
value的第二個參數(shù)是指將查詢結(jié)果轉(zhuǎn)化為何種類型的數(shù)據(jù)。
此處,'.'表示當(dāng)前目錄,即<v>目錄,另外'..'表示上級目錄,'/'表示根目錄,這個跟Linux是一樣的
總的來說,這個語句的重點在于xml類型的使用和outer apply的使用,其他的都很好理解。這個就是我自己理解后的講解,部分位置我自己也還沒有理解透
總結(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)文章
SQL Server誤區(qū)30日談 第30天 有關(guān)備份的30個誤區(qū)
備份不會導(dǎo)致對用戶對象加鎖,雖然備份對IO系統(tǒng)的負(fù)擔(dān)導(dǎo)致看起來阻塞了,但實際上不會。唯一的特例是當(dāng)備份包含到那些最小日志操作涉及到的數(shù)據(jù)區(qū)需要被加鎖時,這個操作會阻塞CheckPoint,但DML操作永遠(yuǎn)不會受到備份操作的阻塞2013-01-01
SQL Server誤區(qū)30日談 第14天 清除日志后會將相關(guān)的LSN填零初始化
當(dāng)日志文件在手動增長,自動增長和創(chuàng)建時都會進(jìn)行填零初始化操作。但是請不要把這個過程和定期清除日志的過程搞混2013-01-01
利用腳本自動安裝SQLServer的實現(xiàn)步驟分析
在工作中,經(jīng)常被要求一天安裝個10臺、8臺的SQL Server。2010-11-11
sql中count或sum為條件的查詢示例(sql查詢count)
在開發(fā)時,我們經(jīng)常會遇到以“累計(count)”或是“累加(sum)”為條件的查詢,下面使用一個示例說明使用方法2014-01-01

