今天由于工作需要,需要把數(shù)據把列根據指定的內容拆分數(shù)據
其中一條數(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'
結果
在自己研究這行代碼之后,做出如下講解,如果有錯誤的地方還請指教
SELECT id, XXXX = CONVERT(xml,'root>v>' + REPLACE(XXXX , ',', '/v>v>') + '/v>/root>') FROM BIZ_PAPER
這一行的重點在于CONVERT,XML是指類型,xml 數(shù)據類型實例拆分為關系數(shù)據,則 nodes() 方法非常有用,至于XML類型的數(shù)據,我后面進行補充
REPLACE 指按照 ' , ' 進行替換,并且按照指定的內容進行拼接
最后的結果為
outer apply
這個就是表的關聯(lián),就像是left join ,但是沒有on 作為關聯(lián)條件,所以通過拆分之后多出來的數(shù)據就是通過這個進行關聯(liá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ù)是讀取標簽之間的值,對于這個列子,讀取的為v>和/v>中間的值;這個可以去了解 xml類型的常用的三個方法 :value()、nodes()、exist()
value的第一個參數(shù)是一個字符串文字,從 XML 實例內部檢索數(shù)據。 XQuery 必須最多返回一個值。 否則,將返回錯誤;
value的第二個參數(shù)是指將查詢結果轉化為何種類型的數(shù)據。
此處,'.'表示當前目錄,即v>目錄,另外'..'表示上級目錄,'/'表示根目錄,這個跟Linux是一樣的
總的來說,這個語句的重點在于xml類型的使用和outer apply的使用,其他的都很好理解。這個就是我自己理解后的講解,部分位置我自己也還沒有理解透
總結
到此這篇關于Sql Server數(shù)據把列根據指定內容拆分數(shù)據的文章就介紹到這了,更多相關SqlServer數(shù)據列根據內容拆分數(shù)據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL按指定字符合并以及拆分實例教程
- MySQL截取和拆分字符串函數(shù)用法示例
- SQL Server實現(xiàn)將特定字符串拆分并進行插入操作的方法
- MySQL 常見數(shù)據拆分辦法
- sqlserver2008 拆分字符串
- SQL 將一列拆分成多列的三種方法