SQL使用STUFF函数删除逗号分隔字符串中指定Title:Value键值对
解决方案
核心思路是先定位RemoveTitle:的起始位置,再查找该位置之后第一个逗号的下标,通过两个下标差值计算需要STUFF删除的长度即可。
长度计算逻辑
- 用
CHARINDEX(@StartSubString, 列名)拿到目标键值对的起始位置 - 用
CHARINDEX(',', 列名, 起始位置)查找目标键值对之后第一个逗号的位置 - 如果能找到逗号,删除长度为「逗号位置 - 起始位置 + 2」(加2是为了同时删掉逗号和后面的分隔空格,避免残留多余符号)
- 如果找不到逗号说明目标键在字符串末尾,删除长度为「字符串总长度 - 起始位置 +1」
完整代码示例
DECLARE @TargetKey VARCHAR(100) = 'RemoveTitle:' SELECT -- 不存在目标键时直接返回原字符串 CASE WHEN CHARINDEX(@TargetKey, columnName) = 0 THEN columnName ELSE STUFF( columnName, CHARINDEX(@TargetKey, columnName), CASE WHEN CHARINDEX(',', columnName, CHARINDEX(@TargetKey, columnName)) > 0 THEN CHARINDEX(',', columnName, CHARINDEX(@TargetKey, columnName)) - CHARINDEX(@TargetKey, columnName) + 2 ELSE LEN(columnName) - CHARINDEX(@TargetKey, columnName) + 1 END, '' END END AS cleaned_string FROM TableName
额外优化说明
如果需要避免匹配到类似OtherRemoveTitle:这类包含目标键名的其他键,可以给匹配逻辑加边界校验:匹配前先给原始字符串拼接一个前置空格,查找' ' + @TargetKey的位置即可,处理完再去掉多余的前置空格即可。
内容的提问来源于stack exchange,提问作者chrisSpaceman
相关产品推荐
相关产品推荐

