原答案:
您可以尝试使用基于 JSON 的方法。您需要将输入字符串转换为有效的 JSON 数组(b,a,c
被转化为["b","a","c"]
)然后用解析这个数组OPENJSON()
和默认架构。结果是一个包含列的表格key
, value
and type
,并根据文档,key
列是包含指定属性的名称或指定数组中元素的索引的 nvarchar(4000) 值.
陈述:
DECLARE @StringToSplit VARCHAR(100) = 'b,a,c';
SELECT [value]
FROM OPENJSON(CONCAT('["', REPLACE(@StringToSplit, ',', '","'), '"]'))
ORDER BY CONVERT(int, [key])
Result:
value
b
a
c
如果输入字符串中有引号,请尝试使用以下语句,使用STRING_ESCAPE()
:
DECLARE @StringToSplit VARCHAR(100) = '"b",''a'',c';
SELECT [value]
FROM OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(@StringToSplit, 'json'), ',', '","'), '"]'))
ORDER BY CONVERT(int, [key])
Result:
value
"b"
'a'
c
Update:
从 SQL Server 2022 开始,STRING_SPLIT()
函数支持可选的第三个参数(enable_ordinal
)。参数是一个int
or bit
表达式用作启用或禁用的标志ordinal
输出列。值为1
使ordinal
柱子。如果enable_ordinal
被省略,NULL
,或值为0
, the ordinal
列被禁用。
SELECT [value]
FROM STRING_SPLIT(@StringToSplit, ',', 1)
ORDER BY [ordinal]