用于提取数据的两个斜杠之间的T-SQL子字符串

用于提取数据的两个斜杠之间的T-SQL子字符串,sql,sql-server,Sql,Sql Server,我正在尝试提取T-SQL中的字符串的一部分,用于我正在处理的项目 示例: /客户/AAA/某物/某物 /客户/BBBB/某物/某物 我特别尝试提取AAA或BBB,它们的字符数不一致 使用CHARINDEX和子字符串尝试以下操作 select Data -- Find second slash , charindex('/', Data, 2) -- Find third slash , charindex('/', Data, charindex('/', Data, 2)+1)

我正在尝试提取T-SQL中的字符串的一部分,用于我正在处理的项目

示例:

/客户/AAA/某物/某物

/客户/BBBB/某物/某物


我特别尝试提取AAA或BBB,它们的字符数不一致

使用CHARINDEX和子字符串尝试以下操作

select Data
  -- Find second slash
  , charindex('/', Data, 2)
  -- Find third slash
  , charindex('/', Data, charindex('/', Data, 2)+1)
  -- Find string between the second and third slash
  , substring(data, charindex('/', Data, 2) + 1, charindex('/', Data, charindex('/', Data, 2)+1) - charindex('/', Data, 2) - 1)
from (
  select '/Clients/AAA/Something/Something' Data
  union all select '/Clients/BBBB/Something/Something'
) x
drop table #a
create table #a (d varchar(100))

insert into #a (d)
    values   ('/Clients/AAA/Something/Something/')
            ,('/Clients/bbbbb/Something/Something/')

select  d       as [OriginalData]
        ,charindex('/', d, charindex('/', d, 0)+1) as [SecondSlash]
        ,charindex('/', d, charindex('/', d, charindex('/', d, 0)+1)+1)  as [ThirdSlash]
        ,SUBSTRING(d    -- Value
                    , charindex('/', d, charindex('/', d, 0)+1)+1  -- Startpoint (SecondSlash) + 1
                    , charindex('/', d, charindex('/', d, charindex('/', d, 0)+1)+1) - charindex('/', d, charindex('/', d, 0)+1)-1) as [Extract]
                                        -- Endpoint (ThirdSlash - SecondSlash - 1)
from #a

它有点凌乱,只会返回第二和第三个斜杠之间的文本,但速度应该相当快。

我发现
apply
可以方便地表达这种类型的逻辑:

with t as (
      select *
      from (values   ('/Clients/AAA/Something/Something/'), ('/Clients/bbbbb/Something/Something/')) t(str)
     )
select *, left(str2, charindex('/', str2) - 1)
from t cross apply
     (values (stuff(str, 1, patindex('%_/%', str) + 1, ''))) v(str2);

请注意,这将查找模式
,以查找字符串中的第二个斜杠。

您使用的是哪个数据库,并且您是否签出了该数据库的字符串函数?Microsoft SQL Server so T-SQL,是的,我一直在尝试使用CHARINDEX和Substring,但遇到了一些问题。起始字符串是否始终相同?截至目前,是的,但我也在尝试找到一种方法,如果它不是,但现在将一如既往地工作。