【问题标题】:Fetching data between 2 underscore获取 2 个下划线之间的数据
【发布时间】:2021-05-18 06:15:27
【问题描述】:

我有这个问题:

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

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

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

谁能帮帮我。

【问题讨论】:

  • SUBSTRING 返回由第三个参数定义的字符数,在该位置您将返回第二个下划线的 位置,即12;所以你要求在第一个下划线之后 的 12 个字符。
  • 您为什么使用不受支持的 SQL Server 版本?

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

正如 Larnu 指出的那样,您要求的字符太多。您还需要减去初始下划线的位置以仅返回中间字符:

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

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

【讨论】:

  • CROSS APPLY (VALUES (charindex('_', @t)... 省去你写 3 次的麻烦
猜你喜欢
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 2019-08-11
  • 2014-03-26
  • 2020-11-03
相关资源
最近更新 更多