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
相关产品推荐
相关产品推荐

