SQL Server中修改varchar列:将特定前缀的11位字符调整为10位
解决方案
可以通过SQL的字符串函数结合条件判断实现需求,以下提供两种简洁的实现方式:
方法一:使用CASE+字符串截取
SELECT CASE WHEN LEFT(SomeCol, 4) = '0169' THEN '039' + RIGHT(SomeCol, 7) ELSE SomeCol END AS SomeCol FROM @Table;
逻辑说明
LEFT(SomeCol, 4):提取列值前4位,判断是否匹配目标前缀'0169'- 匹配时,用'039'拼接原列值的后7位(11-4=7),将11位字符串转为10位
- 不匹配的列值直接保留原样
方法二:使用STUFF函数替换
SELECT CASE WHEN LEFT(SomeCol, 4) = '0169' THEN STUFF(SomeCol, 1, 4, '039') ELSE SomeCol END AS SomeCol FROM @Table;
逻辑说明
STUFF(SomeCol, 1, 4, '039'):从原字符串第1位开始,替换长度为4的子串为'039',精准完成前缀替换并缩短长度- 通过CASE表达式控制仅对符合条件的行执行替换
执行结果
运行任一查询后,将得到如下预期输出:
| SomeCol |
|---|
| 0391234567 |
| 0392234567 |
| 0393234567 |
| 0394234567 |
| 0395234567 |
| 11691234567 |
| 11692234567 |
| 11693234567 |
| 11694234567 |
| 11695234567 |
内容的提问来源于stack exchange,提问作者tnfsmith
相关产品推荐
相关产品推荐

