我正在尝试为正在处理的项目在T-SQL中提取字符串的一部分。
示例:
/客户/ AAA /某事/某事
/客户/ BBBB /某事/某事
我专门尝试提取字符数目不一致的AAA或BBB。
答案 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
这有点混乱,只会返回第二个和第三个斜线之间的文本,但是应该很快。