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

如何修改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

逻辑拆解

  1. 找第一个下划线:CHARINDEX('_', @x) 拿到第一个下划线的位置(对应例子里的第4位)
  2. 找第二个下划线:从第一个下划线的下一位开始搜索,CHARINDEX('_', @x, 第一次位置+1) 得到第二个下划线的位置(例子里的第7位)
  3. 找第三个下划线:同理从第二个下划线的下一位开始搜,得到第三个下划线的位置(例子里的第11位)
  4. 截取目标内容:用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:54:17