SQL Server如何仅将字符串的前两个连字符替换为竖线
SQL Server 仅替换前两个连字符的实现方法
以下是两种适配不同版本的实现方案,均可满足需求:
方案1:全版本兼容方案
该方案支持所有SQL Server版本,逻辑稳定直观,无需依赖高版本新特性:
DECLARE @inputStr VARCHAR(100) = 'UTR-ATLAS-006-0143391-002'; -- 定位第一个连字符的位置 DECLARE @firstHyphenPos INT = CHARINDEX('-', @inputStr); -- 从第一个连字符之后开始定位第二个连字符的位置 DECLARE @secondHyphenPos INT = CHARINDEX('-', @inputStr, @firstHyphenPos + 1); -- 两次调用STUFF函数依次替换前两个连字符 SELECT STUFF( STUFF(@inputStr, @firstHyphenPos, 1, '|'), @secondHyphenPos, 1, '|' ) AS outputStr;
- 逻辑说明:
CHARINDEX用于定位指定字符在字符串中的位置STUFF函数会从指定位置开始,替换固定长度的字符,不会影响其余位置的内容- 运行后输出结果为
UTR|ATLAS|006-0143391-002,完全符合预期
方案2:SQL Server 2022 / Azure SQL 简化方案
如果使用支持STRING_SPLIT序号参数的高版本SQL Server,可以用拆分重组的写法,方便后续扩展替换前N个字符的需求:
DECLARE @inputStr VARCHAR(100) = 'UTR-ATLAS-006-0143391-002'; SELECT STRING_AGG(value, IIF(ordinal <= 2, '|', '-')) WITHIN GROUP (ORDER BY ordinal) AS outputStr FROM STRING_SPLIT(@inputStr, '-', 1)
- 逻辑说明:
STRING_SPLIT的第三个参数设为1时会返回拆分后的项的原始顺序序号- 前两个拆分项之间用竖线拼接,剩余项仍用连字符拼接,自动保留后续所有连字符
内容的提问来源于stack exchange,提问作者Rim Sebai
相关产品推荐
相关产品推荐

