MSSQL中字符串分割一行轉多行


在SQL中經常會遇到按固定格式拼接的字符串,有時候需要將這些字符串拆分為多行。

經網上查找,找到方法:(SQL2005+)

將字符串轉換為XML格式,再通過MSSQL對XML的處理分成多行。

CREATE TABLE tb (id INT, strArr VARCHAR(30));
GO
INSERT INTO tb VALUES(1, 'aa,bb');
INSERT INTO tb VALUES(2, 'aaa,bbb,ccc');
GO

SELECT * FROM tb;
GO

-- 一行轉多行查詢
SELECT A.id, B.strVal
FROM(
    -- 拼接為XML字符串,轉換為XML格式數據 <r>是根節點 <v>是值節點
    SELECT id, strXML=CONVERT(XML, '<r><v>'+REPLACE(strArr, ',', '</v><v>')+'</v></r>')FROM tb
) A
OUTER APPLY(
    -- 讀取XML的值節點的值,轉為字符串格式
    SELECT strVal=N.v.value('.', 'varchar(100)') FROM A.strXML.nodes('/r/v') N(v) 
) B;
GO
    
DROP TABLE tb;
GO

 

 一行轉多行。參考資料:

https://bbs.csdn.net/topics/392362532?page=1&from=singlemessage

 OUTER APPLY 交叉連接查詢。參考資料:

https://blog.csdn.net/wikey_zhang/article/details/77480118

讀取XML節點值,參考資料:

https://www.cnblogs.com/tiandaowuji/p/6010210.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM