i****a 发帖数: 36252 | 1 我只會寫一個 funcation,並使用 cross apply call the funcation. 此 query 好象
很利害, 不需要 function.
http://mangalpardeshi.blogspot.com/2009/03/how-to-split-comma-d
Create Sample Data :
-- Create Table for Sample Data
CREATE TABLE Test
(
ID INT,
AllNames VARCHAR(100)
)
GO
-- Load Sample Data
INSERT INTO test SELECT
1, 'A,B,C' UNION ALL SELECT
2, 'A,B' UNION ALL SELECT
3, 'X,Y,Z'
GO
-- Verify the Sample Data
SELECT Id, AllNames
FROM Test
And here is the query for How to split a comma delimited string :
;WITH Cte AS
(
SELECT
id,
CAST('' + REPLACE( Allnames, ',' , '') + '' AS XML)
AS Names
FROM Test
)
SELECT
ID,
Split.a.value('.', 'VARCHAR(100)') AS Names
FROM Cte
CROSS APPLY Names.nodes('/M') Split(a) | s**********0 发帖数: 266 | 2 CROSS APPLY 对multiple level XML很有用,他会选择所有那一个level的 nodes, 然后你可以用 .value 去读那个XML node里的 attribute value 和data value.
这个CTE只不过是把 Column ‘AllNames’ 里的数据 转换成一个XML string。 把 ‘,’之间的内容全搞成一个XML node。 其实只是一个很简单的xpath 的select而已。 | i****a 发帖数: 36252 | 3 apply 還有 built in function, .value, .node etc. nice
然后你可以用 .value 去读那个XML node里的 attribute value 和data value.
‘,’之间的内容全搞成一个XML node。 其实只是一个很简单的xpath 的select而已。
【在 s**********0 的大作中提到】 : CROSS APPLY 对multiple level XML很有用,他会选择所有那一个level的 nodes, 然后你可以用 .value 去读那个XML node里的 attribute value 和data value. : 这个CTE只不过是把 Column ‘AllNames’ 里的数据 转换成一个XML string。 把 ‘,’之间的内容全搞成一个XML node。 其实只是一个很简单的xpath 的select而已。
|
|