歡迎您光臨本站 註冊首頁

Sql Server數據把列根據指定內容拆分數據的方法實例

←手機掃碼閱讀     f2h0b53ohn @ 2020-06-27 , reply:0

今天由於工作需要,需要把數據把列根據指定的內容拆分數據

其中一條數據實例

 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,'' + REPLACE(XXXX , ',', '') + '') 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,'' + REPLACE(XXXX , ',', '') + '') FROM BIZ_PAPER

 

這一行的重點在於CONVERT,XML是指類型,xml 數據類型實例拆分為關係數據,則 nodes() 方法非常有用,至於XML類型的數據,我後面進行補充

REPLACE 指按照 ' , ' 進行替換,並且按照指定的內容進行拼接

最後的結果為

 

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函數是讀取標籤之間的值,對於這個列子,讀取的為中間的值;這個可以去了解 xml類型的常用的三個方法 :value()、nodes()、exist()

value的第一個參數是一個字符串文字,從 XML 實例內部檢索數據。 XQuery 必須最多返回一個值。 否則,將返回錯誤;

value的第二個參數是指將查詢結果轉化為何種類型的數據。

此處,'.'表示當前目錄,即目錄,另外'..'表示上級目錄,'/'表示根目錄,這個跟Linux是一樣的

總的來說,這個語句的重點在於xml類型的使用和outer apply的使用,其他的都很好理解。這個就是我自己理解後的講解,部分位置我自己也還沒有理解透

 


[f2h0b53ohn ] Sql Server數據把列根據指定內容拆分數據的方法實例已經有393次圍觀

http://coctec.com/docs/mysql/show-post-239875.html