如何用单条SQL语句去除字符串字母并更新数据表?
可行!SQL Server 2008 R2+ 单条语句实现需求
当然可以做到!在SQL Server 2008 R2及以上版本,我们可以利用递归CTE结合FOR XML PATH来实现单条SQL语句的更新,完成去除字母、保留数字和<strong>标签的需求。
具体实现代码
假设你的数据表名为YourTable,需要处理的字段名为TargetColumn,对应的UPDATE语句如下:
UPDATE YourTable SET TargetColumn = ( WITH CharIterator AS ( -- 初始化:取第一个字符和原字符串 SELECT 1 AS CharPos, SUBSTRING(TargetColumn, 1, 1) AS SingleChar, TargetColumn AS OriginalStr FROM YourTable UNION ALL -- 递归遍历后续每个字符 SELECT CharPos + 1, SUBSTRING(OriginalStr, CharPos + 1, 1), OriginalStr FROM CharIterator WHERE CharPos < LEN(OriginalStr) ) -- 拼接保留的字符:先加起始标签,再拼接所有数字,最后加结束标签 SELECT '<strong>' + (SELECT '' + SingleChar FROM CharIterator WHERE SingleChar LIKE '[0-9]' -- 只保留数字字符 FOR XML PATH('')) + '</strong>' ) -- 可选:只处理符合<strong>包裹格式的记录 WHERE TargetColumn LIKE '<strong>%</strong>' OPTION (MAXRECURSION 0); -- 取消递归深度限制,适配超长字符串
原理说明
- 递归CTE (
CharIterator):逐个遍历目标字符串的每一个字符,把每个字符拆分成单独的行,实现对字符串的逐字符处理。 - 筛选拼接:通过
WHERE SingleChar LIKE '[0-9]'筛选出所有数字字符,再用FOR XML PATH('')把这些零散的数字拼接成一个连续的字符串。 - 重构标签:把拼接好的数字字符串重新用
<strong>标签包裹,替换原字段的值,还原你需要的标签结构。
补充说明
如果你的字符串中<strong>标签存在嵌套、多标签等复杂情况,可以调整筛选逻辑保留标签相关字符,但针对你给出的示例场景,这个语句完全适用。
内容的提问来源于stack exchange,提问作者Gopakumar N.Kurup
相关产品推荐
相关产品推荐

