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

SQL Server中如何替换倒数第二个横杠后的指定内容?

解决SQL字符串替换最后两个横杠间内容的问题

嘿,这个需求其实不用发愁,用SQL里的字符串函数组合就能轻松实现,我给你两种实用的方案,你可以根据自己的SQL版本来选:

方法一:反向定位法(兼容多数SQL Server版本)

这种方法不用依赖高版本的新函数,靠基础的字符串操作就能搞定,思路是先定位最后两个横杠的位置,再把中间的内容替换掉:

DECLARE @test VARCHAR(50) = 'F-1084-002-04-009'
DECLARE @replaceVal VARCHAR(2) = '00'

-- 先把字符串倒过来,找最后一个横杠在原字符串里的反向位置
DECLARE @lastDashPos INT = CHARINDEX('-', REVERSE(@test))
-- 再找倒数第二个横杠的反向位置
DECLARE @secondLastDashPos INT = CHARINDEX('-', REVERSE(@test), @lastDashPos + 1)

-- 拼接最终结果:保留前面的部分 + 替换值 + 保留最后一段
SELECT 
    LEFT(@test, LEN(@test) - @secondLastDashPos) 
    + @replaceVal 
    + RIGHT(@test, @lastDashPos - 1) AS ModifiedString

简单说下逻辑:把字符串反转后,原来的最后两个横杠就变成了开头的两个横杠,这样用CHARINDEX就能轻松找到它们的位置,再通过长度计算出原字符串里需要保留的前后段,最后把替换值插进去就行。

方法二:拆分重组法(SQL Server 2016及以上适用)

如果你的SQL Server版本支持STRING_SPLIT和STRING_AGG这两个函数,那可以用更直观的拆分-修改-重组思路:

DECLARE @test VARCHAR(50) = 'F-1084-002-04-009'
DECLARE @replaceVal VARCHAR(2) = '00'

WITH SplitParts AS (
    SELECT 
        value,
        -- 给拆分后的每一段编号
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS PartNumber
    FROM STRING_SPLIT(@test, '-')
)
SELECT 
    -- 把各段拼回去,第4段替换成目标值
    STRING_AGG(CASE WHEN PartNumber = 4 THEN @replaceVal ELSE value END, '-') AS ModifiedString
FROM SplitParts

这个方法更易懂:先把字符串按横杠拆分成独立的片段,给每个片段编上号(这里原字符串是5段,要替换的是第4段),然后用CASE语句把第4段换成00,最后再用STRING_AGG把所有片段拼回成完整的字符串。

两种方法都能得到你想要的结果:F-1084-002-00-009,选哪种就看你的环境啦~

内容的提问来源于stack exchange,提问作者JJ.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:13:18