SQL Server提取特定分隔符子串并拼接的实现求助
解决SQL Server中提取指定格式字符串的问题
方法一:适用于SQL Server 2017及以上版本(推荐)
利用STRING_SPLIT拆分字符串,结合STRING_AGG聚合结果,代码如下:
SELECT STRING_AGG(SUBSTRING(s.split_value, 1, CHARINDEX(':', s.split_value) - 1), ',') AS processed_review FROM YourTable CROSS APPLY ( SELECT value AS split_value FROM STRING_SPLIT(YourTable.review, '|') WHERE value <> '' ) s GROUP BY YourTable.Id -- 替换为你的表的唯一标识列(如主键)
方法二:兼容SQL Server 2016及以下版本
如果你的SQL Server版本不支持STRING_AGG,可以使用STUFF+FOR XML PATH的拼接方式:
SELECT STUFF(( SELECT ',' + SUBSTRING(s.split_value, 1, CHARINDEX(':', s.split_value) - 1) FROM ( SELECT value AS split_value FROM STRING_SPLIT(t.review, '|') WHERE value <> '' ) s FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS processed_review FROM YourTable t
代码说明
- 拆分字符串:通过
STRING_SPLIT(review, '|')将每行的review列按|拆分成多个片段,并用WHERE value <> ''过滤掉末尾|产生的空片段。 - 提取目标内容:使用
SUBSTRING(s.split_value, 1, CHARINDEX(':', s.split_value) - 1)提取每个片段中第一个:之前的字符串。 - 聚合拼接:
- 2017+版本用
STRING_AGG直接将提取到的字符串用逗号连接。 - 低版本通过
FOR XML PATH生成拼接字符串,再用STUFF去掉开头多余的逗号。
- 2017+版本用
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

