您可以先清除字符串中的任何特殊字符,例如出现包含在
< >。
清理字符串后,您应该对每个值进行一致分隔,然后可以将其呈现给 XML 函数,该函数将根据从左到右的数字位置将值与分隔字符串隔离。
DECLARE @TEST TABLE (STRING NVARCHAR(150));
INSERT INTO @TEST
VALUES
('N,l,S,T,A,,<all>,,N,A,N,N,N,Y,Y,,Y,Y,Y,,AA,SA'),
('M,,A,S,AS,SS,AS,N,N,N,N,Y,Y,Y,ENTERPRISE,S,,A'),
('L,,A,D,S,A,A,AA,Y,Y,Y,YNN,N,N,N,N,A,AA,AD,D,D')
SELECT
CONVERT(XML,'<x>'+REPLACE(REPLACE(REPLACE(STRING,'>',''),'<',''),',','</x><x>')+'</x>').value('/x[10]','NVARCHAR(150)') [VALUE 10],
STRING
FROM @TEST
这确实依赖于传递给函数的干净字符串,如果字符串没有清除特殊字符或始终被定界,则函数将失败。
VALUE 10 STRING
A N,l,S,T,A,,<all>,,N,A,N,N,N,Y,Y,,Y,Y,Y,,AA,SA
N M,,A,S,AS,SS,AS,N,N,N,N,Y,Y,Y,ENTERPRISE,S,,A
Y L,,A,D,S,A,A,AA,Y,Y,Y,YNN,N,N,N,N,A,AA,AD,D,D
对于 Clarity,您可以像这样使用此函数:
SELECT
CONVERT(XML,'<x>'+REPLACE(REPLACE(REPLACE(STRING,'>',''),'<',''),',','</x><x>')+'</x>').value('/x[10]','NVARCHAR(150)') [VALUE 10]
FROM YOURTABLE
只需将函数中的 STRING 替换为您的列名,就可以了。