SQLSERVER 帶分隔的字符串與列表相互轉換

先自定義一個簡單的表(TB01)數據:

select TB01.CC from (select '香港' CC union all select '上海' CC union all select '北京' CC) TB01 

1、列表某列數據轉逗號分隔的字符串(這裏的分隔符任意,以英文逗號舉例)

DECLARE @_text VARCHAR(MAX)

SET @_text = STUFF((SELECT ','+TB01.CC FROM TB01 for xml path('')),1,1,'') 

 這裏兩個知識點:

a、stuff函數:作用是去除拼接的字符串最前面的逗號

b、for xml path:替換節點<row>,參數如果是'',將節點定義成空,如果是'xxx',節點定義成<xxx>。這裏不妨可以試下

SELECT * FROM TB01 FOR XML PATH 無參

SELECT * FROM TB01 FOR XML PATH('')

2、逗號分隔的字符串轉列表數據

select 
    b.text     --4.查出text值
from 
    (select [text]=convert(xml,'<root><v>'+replace(@_text ,',','</v><v>')+'</v></root>'))a    
               --1.將逗號用xml標籤替換,然後轉換成xml格式
outer apply    --2.做關聯查詢
    (select [text]=C.v.value('.','nvarchar(100)') from a.[text].nodes('/root/v')C(v))b
               --3.將xml內容按照標籤替換拆分節點並查出每個節點的value值標記爲text

當然網上還有其他方法,個人感覺這兩種方法更適合自己,簡單易懂!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章