Sql server MSSQL如何从第三个分隔符的右侧选择字符串(从右侧计数)
因此,我的问题如下:- 我有多个带不同数量分隔符的字符串,分隔符之间的文本数量也可能不同:-Sql server MSSQL如何从第三个分隔符的右侧选择字符串(从右侧计数),sql-server,string,tsql,Sql Server,String,Tsql,因此,我的问题如下:- 我有多个带不同数量分隔符的字符串,分隔符之间的文本数量也可能不同:- fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd wegf\df\jght\kfd\dfgert 我需要做的是剪切字符串,只保留示例中的以下内容:- ooorr\ter\fdgd jght\kfd\dfgert 基本上是右边的第三个分隔符。 我已经能够使用右键、CHARINDEX键和反转键来给我琴弦的最后部分,但我正在为剩下的部分而奋斗。 提前感
fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd
wegf\df\jght\kfd\dfgert
我需要做的是剪切字符串,只保留示例中的以下内容:-
ooorr\ter\fdgd
jght\kfd\dfgert
基本上是右边的第三个分隔符。
我已经能够使用右键、CHARINDEX键和反转键来给我琴弦的最后部分,但我正在为剩下的部分而奋斗。
提前感谢您的帮助。文本处理是您可能需要在表示层中执行的操作,但最简单的方法是执行以下操作:
Select Substring(col1, len(col1) - CharIndex('\', reverse(col1), Charindex('\',reverse(col1),charindex('\', reverse(col1),1)+1)+1)+2, len(col1)) from #delimiterdata
输出如下:
+-----------------+
| Output |
+-----------------+
| ooorr\ter\fdgd |
| jght\kfd\dfgert |
+-----------------+
文本处理可能需要在表示层中进行,但最简单的方法是如下所示:
Select Substring(col1, len(col1) - CharIndex('\', reverse(col1), Charindex('\',reverse(col1),charindex('\', reverse(col1),1)+1)+1)+2, len(col1)) from #delimiterdata
输出如下:
+-----------------+
| Output |
+-----------------+
| ooorr\ter\fdgd |
| jght\kfd\dfgert |
+-----------------+
另一个选择是使用少量XML和交叉应用程序 范例 返回
另一个选择是使用少量XML和交叉应用程序 范例 返回 使用以下方法可以做到这一点:
-- sample data
declare @yourtable table (someId int identity, someString varchar(1000));
insert @yourtable
values ('fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd'),('wegf\df\jght\kfd\dfgert');
with stringPrep AS
(
select
someId,
someString,
dPos = ROW_NUMBER() OVER (partition by t.someid order by ng.position desc),
position
from @yourtable t
cross apply dbo.NGrams8k(t.someString, 1) ng
where token = '\'
)
select
someId,
someString,
newString = substring(someString, position+1, 1000)
from stringPrep
where dpos = 3;
结果
someId someString newString
------- ------------------------------------------------------------ -----------------
1 fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd ooorr\ter\fdgd
2 wegf\df\jght\kfd\dfgert jght\kfd\dfgert
使用以下方法可以做到这一点:
-- sample data
declare @yourtable table (someId int identity, someString varchar(1000));
insert @yourtable
values ('fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd'),('wegf\df\jght\kfd\dfgert');
with stringPrep AS
(
select
someId,
someString,
dPos = ROW_NUMBER() OVER (partition by t.someid order by ng.position desc),
position
from @yourtable t
cross apply dbo.NGrams8k(t.someString, 1) ng
where token = '\'
)
select
someId,
someString,
newString = substring(someString, position+1, 1000)
from stringPrep
where dpos = 3;
结果
someId someString newString
------- ------------------------------------------------------------ -----------------
1 fug\klde\hzt\jkljlkjlkjl\hgftb\jghgf\ooorr\ter\fdgd ooorr\ter\fdgd
2 wegf\df\jght\kfd\dfgert jght\kfd\dfgert
请告诉我们您的尝试。请告诉我们您的尝试。虽然这些都是非常好的解决方案,但我发现John Cappelletti的答案对我来说是最好的,因为添加或减少分隔符的数量很容易。非常感谢@CraigRobinson乐于提供帮助虽然这些都是很好的解决方案,但我发现John Cappelletti的答案对我来说是最好的,因为添加或减少分隔符的数量很容易。非常感谢@克雷格宾森很乐意帮忙