Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MSSQL如何从第三个分隔符的右侧选择字符串(从右侧计数)_Sql Server_String_Tsql - Fatal编程技术网

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的答案对我来说是最好的,因为添加或减少分隔符的数量很容易。非常感谢@克雷格宾森很乐意帮忙