如何修改SQL语句获取字符串中下划线第三次出现后的内容?
获取SQL字符串中第三次下划线后的内容
你的原SQL语句逻辑是找最后一个下划线的位置并截取左边内容,这和你要的“第三次下划线之后的内容”需求不匹配,我给你调整一下:
修改后的SQL语句
DECLARE @x varchar(100) SET @x = '110_DT_H55_VXELQ318_10Q' -- 先定位第三次下划线的位置 DECLARE @thirdUnderscorePos int SET @thirdUnderscorePos = CHARINDEX('_', @x, CHARINDEX('_', @x, CHARINDEX('_', @x)+1)+1) -- 截取第三次下划线之后的所有内容 SELECT SUBSTRING(@x, @thirdUnderscorePos + 1, LEN(@x)) AS Result
嫌麻烦的话也可以写成一行简化版:
DECLARE @x varchar(100) SET @x = '110_DT_H55_VXELQ318_10Q' SELECT SUBSTRING(@x, CHARINDEX('_', @x, CHARINDEX('_', @x, CHARINDEX('_', @x)+1)+1) + 1, LEN(@x)) AS Result
逻辑拆解
- 找第一个下划线:
CHARINDEX('_', @x)拿到第一个下划线的位置(对应例子里的第4位) - 找第二个下划线:从第一个下划线的下一位开始搜索,
CHARINDEX('_', @x, 第一次位置+1)得到第二个下划线的位置(例子里的第7位) - 找第三个下划线:同理从第二个下划线的下一位开始搜,得到第三个下划线的位置(例子里的第11位)
- 截取目标内容:用
SUBSTRING从第三次下划线的下一位开始,一直取到字符串末尾,就得到了你要的VXELQ318_10Q
如果你的SQL Server版本是2016及以上,还可以用拆分拼接的方式实现(可读性更强):
DECLARE @x varchar(100) SET @x = '110_DT_H55_VXELQ318_10Q' SELECT STRING_AGG(value, '_') AS Result FROM ( SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM STRING_SPLIT(@x, '_') ) t WHERE rn > 3
这个方法是把字符串按下划线拆分成多行,筛选出第4行及以后的内容,再重新拼接成字符串,结果和前面的方法一致。
内容的提问来源于stack exchange,提问作者ganesh
相关产品推荐
相关产品推荐

