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

SQL中定位特殊字符后第二个字符及提取最后'-'后内容的方法

嘿,这两个字符串处理的问题我日常工作里经常碰到,给你整理两种实用的解法:

问题一:查找特殊字符后的第二个字符

要实现这个需求,核心是先定位特殊字符的位置,再偏移2位截取对应字符。以特殊字符为-为例,咱们可以用CHARINDEX找到它的位置,再用SUBSTRING提取目标字符:

-- 定义输入字符串和特殊字符
DECLARE @inputStr VARCHAR(100) = 'abc-def-ghi';
DECLARE @specialChar CHAR(1) = '-';

-- 提取特殊字符后的第二个字符
SELECT SUBSTRING(
    @inputStr,
    CHARINDEX(@specialChar, @inputStr) + 2, -- 特殊字符位置+2,就是目标字符的起始位
    1 -- 只取1个字符
) AS SecondCharAfterSpecial;

如果你的字符串里有多个特殊字符,想找第N个特殊字符后的第二个字符,可以嵌套CHARINDEX来定位:

-- 比如找第二个'-'后的第二个字符
DECLARE @inputStr VARCHAR(100) = 'abc-def-ghi-jkl';
DECLARE @specialChar CHAR(1) = '-';

SELECT SUBSTRING(
    @inputStr,
    -- 找到第二个'-'的位置,再加2
    CHARINDEX(@specialChar, @inputStr, CHARINDEX(@specialChar, @inputStr) + 1) + 2,
    1
) AS SecondCharAfterSecondSpecial;
问题二:提取最后一个'-'之后的内容

对于动态长度的字符串,最稳妥的方法是通过反转字符串来简化定位——最后一个'-'反转后就变成第一个,处理起来更方便。这里提供两种写法:

方法一:反转+截取+再反转

DECLARE @inputStr VARCHAR(100) = 'student 1-99-98 - 281 - 1567519464';

SELECT REVERSE(
    SUBSTRING(
        REVERSE(@inputStr),
        1,
        CHARINDEX('-', REVERSE(@inputStr)) - 1 -- 取反转后第一个'-'之前的内容
    )
) AS LastPartAfterDash;

方法二:用RIGHT函数简化写法

DECLARE @inputStr VARCHAR(100) = 'student 1-99-98 - 281 - 1567519464';

SELECT RIGHT(
    @inputStr,
    CHARINDEX('-', REVERSE(@inputStr)) - 1 -- 直接取右边对应长度的内容
) AS LastPartAfterDash;

两种方法都能精准提取出1567519464,第二种更简洁,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:38:10