如何在SQL Server中移除列末尾带括号的数字及相关字符?
解决方法
你可以用SQL Server的字符串函数处理这个需求,下面是两种实用方案:
方案1:PATINDEX + LEFT(兼容老版本SQL Server)
这种方法适配SQL Server 2008及以上版本,通过匹配目标模式截取有效内容:
SELECT 原列名 AS OriginalValue, CASE WHEN PATINDEX('% ([0-9])%', 原列名) > 0 THEN LEFT(原列名, PATINDEX('% ([0-9])%', 原列名) - 1) ELSE 原列名 END AS 清理后的值 FROM 你的表名
PATINDEX('% ([0-9])%', 原列名)会定位到字符串中第一个" (数字)"的起始位置(注意前面的空格)- 如果匹配到目标模式,就截取开头到该位置之前的内容;未匹配到则保留原内容
方案2:REGEXP_REPLACE(SQL Server 2016+)
如果你的SQL Server版本是2016及以上,用正则替换会更简洁:
SELECT 原列名 AS OriginalValue, REGEXP_REPLACE(原列名, ' \([0-9]+\)$', '') AS 清理后的值 FROM 你的表名
- 正则表达式
' \([0-9]+\)$'专门匹配字符串末尾的" (数字)"格式内容 - 直接把匹配到的部分替换为空,未符合模式的内容保持不变
测试效果
用你提供的示例数据测试,结果如下:
| 原始值 | 清理后的值 |
|---|---|
| SAND FRACING 100 MESH (1441317) | SAND FRACING 100 MESH |
| SANDFRAC4070 (1441316) | SANDFRAC4070 |
| SANDFRAC3050MES | SANDFRAC3050MES |
| SAND FRACING 30 50 MESH | SAND FRACING 30 50 MESH |
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

