我有一个字段可以出现多次特定的分隔符-在我的例子中是'*'。分隔符最多可以出现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。
答案 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