今天因爲工做須要,須要把數據把列根據指定的內容拆分數據node
其中一條數據實例app
select id , XXXX FROM BIZ_PAPER where id ='4af210ec675927fa016772bf7dd025b0'函數
拆分方法:ui
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'spa
結果xml
在本身研究這行代碼以後,作出以下講解,若是有錯誤的地方還請指教blog
SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER
這一行的重點在於CONVERT,XML是指類型,xml 數據類型實例拆分爲關係數據,則 nodes() 方法很是有用,至於XML類型的數據,我後面進行補充字符串
REPLACE 指按照 ' , ' 進行替換,而且按照指定的內容進行拼接class
最後的結果爲gui
outer apply
這個就是表的關聯,就像是left join ,可是沒有on 做爲關聯條件,因此經過拆分以後多出來的數據就是經過這個進行關聯後產生的
SELECT XXXX = N.v.value('.', 'varchar(100)') FROM A.XXXX .nodes('/root/v') N(v)
N.v.value('.','varchar(100)'),N是表,別名,v是列,value函數是讀取標籤之間的值,對於這個列子,讀取的爲<v>和</v>中間的值;這個能夠去了解 xml類型的經常使用的三個方法 :value()、nodes()、exist()
value的第一個參數是一個字符串文字,從 XML 實例內部檢索數據。 XQuery 必須最多返回一個值。 不然,將返回錯誤;
value的第二個參數是指將查詢結果轉化爲什麼種類型的數據。
此處,'.'表示當前目錄,即<v>目錄,另外'..'表示上級目錄,'/'表示根目錄,這個跟Linux是同樣的
總的來講,這個語句的重點在於xml類型的使用和outer apply的使用,其餘的都很好理解。這個就是我本身理解後的講解,部分位置我本身也尚未理解透