在 2 个下划线之间获取数据

Fetching data between 2 underscore

我有这个查询:

Declare @t nvarchar(300) ='83082351_10_P00004'

select SUBSTRING(
                    @t,
                    charindex('_',@t)+1,
                    CHARINDEX('_', @t, (CHARINDEX('_', @t)+1))
)

我希望输出为 10,它位于两个 _ 字符之间,我不知道我在查询中做错了什么。

有人可以帮我解决这个问题吗?

正如 Larnu 所指出的,您要求的字符太多。您还需要将初始下划线的位置减去 return 只是中间字符:

declare @t nvarchar(300) ='83082351_10_P00004'

select substring(@t
                ,charindex('_',@t)+1
                ,charindex('_'
                          ,@t
                          ,charindex('_', @t)+1
                          )
                 - (charindex('_',@t)+1)
                )