如何在SQL Server中使用REPLACE函数替换指定区间的可变长度文本
实现方案
你可以通过定位LL的位置、拆分字符串后清除前导零再拼接的方式实现需求,用到的CHARINDEX、PATINDEX、SUBSTRING、LEN均为SQL通用函数,兼容SQL Server所有主流版本:
SELECT -- 取LL之前的部分 SUBSTRING(ProductID, 1, CHARINDEX('LL', ProductID) - 1) + '/' -- 取LL之后的部分,截掉所有前导零后拼接 + SUBSTRING( SUBSTRING(ProductID, CHARINDEX('LL', ProductID) + 2, LEN(ProductID)), PATINDEX('%[^0]%', SUBSTRING(ProductID, CHARINDEX('LL', ProductID) + 2, LEN(ProductID))), LEN(ProductID) ) AS [Product Code] FROM Product
逻辑说明
- 用
CHARINDEX('LL', ProductID)获取LL首次出现的位置,截取该位置之前的字符串作为前缀 - 截取
LL之后的所有字符,用PATINDEX('%[^0]%', 字符串)匹配第一个非零字符的位置 - 前缀 +
/+ 第一个非零字符开始的后缀,拼接得到最终结果
测试效果
对应你给出的三条测试数据,执行后返回结果如下:
| Product Code |
|---|
| PID/74853 |
| PID/86752 |
| PID/84276 |
如果需要保留LL之后除了前导零之外的零(比如第三条数据原替换结果为PID/084276),只需要调整匹配非零字符的规则即可,当前方案完全匹配你提出的「将LL及其后续的所有零替换为一个/」的需求。
内容的提问来源于stack exchange,提问作者Lloyd Thomas
相关产品推荐
相关产品推荐

