You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:36:03