查找字段中某个特定字符的出现并检索数据直到数据开始

时间:2019-03-04 20:02:52

标签: sql-server split sql-server-2014

我有一个字段可以出现多次特定的分隔符-在我的例子中是'*'。分隔符最多可以出现10次,最少出现1次。并非所有10次出现都一次出现在现场。根据需要,我需要找到第n个定界符,并在删除定界符的出现后,将定界符中可用的所有数据返回到字段的开头。

注意-我没有对DB的写访问权,因此无法创建用户定义函数来试用instring / substring组合。

示例:

Stack\*over\*flow\*com\*exchange\*queries\*need\*answer\*for\*thisquery\*

要求#1 -查找*的第二次出现,并在删除*后返回LHS上的所有内容

answer -。Stackover

要求#2 -查找*的第五次出现,并在删除*后返回LHS上的所有内容

答案-Stackoverflowcomexchange

一直持续到找到第10个事件。
我能够获取第一个事件和lhs数据,但无法找出其余的事件。

使用的数据库是SQL Server 2014。

1 个答案:

答案 0 :(得分:0)

可能的快速解决方案:

declare @a varchar(100), @i int = 5, @j int = 0;

select @a = 'Stack\*over\*flow\*com\*exchange\*queries\*need\*answer\*for\*thisquery\*';

select @a = @a + replicate('\*', @i); -- Avoid delimiter not found

while @i > 0
    select @j = charindex('*', @a, @j + 1), @i -= 1;

select replace(left(@a, @j), '\*', '') as Result