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

时间:2018-12-04 01:45:42

标签: sql sql-server

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

示例:

/客户/ AAA /某事/某事

/客户/ BBBB /某事/某事

我专门尝试提取字符数目不一致的AAA或BBB。

3 个答案:

答案 0 :(得分:1)

我发现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);

请注意,这会寻找模式_/来找到字符串中的第二个斜杠。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用CHARINDEX和SUBSTRING尝试以下操作。

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

这有点混乱,只会返回第二个和第三个斜线之间的文本,但是应该很快。