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

求助:SQL Server中如何移除混合字符串末尾的数字?

在SQL Server中移除字符串末尾的数字

要实现仅移除字符串末尾的连续数字、保留其余所有内容的需求,可以通过组合使用REVERSE、PATINDEX和LEFT函数来完成,以下是具体方案:

核心逻辑

  1. 反转目标字符串,从反转后的开头(对应原字符串的末尾)查找第一个非数字字符的位置;
  2. 根据该位置计算原字符串需要保留的长度,截取对应部分即可。

直接查询示例

SELECT 
    OriginalString,
    CASE 
        -- 处理全数字的边界情况,可根据需求返回原字符串或空值
        WHEN PATINDEX('%[^0-9]%', REVERSE(OriginalString)) = 0 THEN OriginalString
        ELSE LEFT(OriginalString, LEN(OriginalString) - PATINDEX('%[^0-9]%', REVERSE(OriginalString)) + 1) 
    END AS TrimmedString
FROM (
    -- 测试用例
    VALUES 
        ('abcd-1-efgh12'),   -- 预期结果:abcd-1-efgh
        ('xyz789abc111'),    -- 预期结果:xyz789abc
        ('123test456'),      -- 预期结果:123test
        ('onlytext'),        -- 预期结果:onlytext
        ('12345')            -- 全数字,返回原字符串
) AS T(OriginalString)

封装为自定义函数(复用场景)

如果需要多次使用该逻辑,可以封装成自定义函数:

CREATE FUNCTION dbo.TrimTrailingNumbers(@InputString NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @ReverseString NVARCHAR(MAX) = REVERSE(@InputString)
    DECLARE @FirstNonDigitPos INT = PATINDEX('%[^0-9]%', @ReverseString)
    
    -- 全数字时返回原字符串,若需返回空值可改为 RETURN ''
    IF @FirstNonDigitPos = 0
        RETURN @InputString
    
    RETURN LEFT(@InputString, LEN(@InputString) - @FirstNonDigitPos + 1)
END
GO

-- 调用示例
SELECT 
    dbo.TrimTrailingNumbers('abcd-1-efgh12') AS TrimmedResult

内容的提问来源于stack exchange,提问作者Lee Murray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:42:36