0

我有一个字段可以多次出现特定分隔符 - 在我的情况下它是“*”。分隔符在该字段中最多可以出现 10 次,最少出现 1 次。并非强制要求所有 10 次事件都在现场一次出现。根据要求,我需要找到第 n 次出现的分隔符,并在删除分隔符的出现作为输出后,将任何可用的数据从分隔符返回到字段的开头。

注意 - 我没有对 DB 的写入权限,因此无法创建用户定义函数来尝试字符串/子字符串组合。

例子:

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

要求#1 - 找到第二次出现的 * 并在删除 * 后返回 LHS 上的任何内容

回答-。Stackover

要求#2 - 找到第 5 次出现 * 并在删除 * 后返回 LHS 上的任何内容

答案——Stackoverflowcomexchange

这种情况一直持续到第 10 次出现。
我能够获得第一次出现和 lhs 数据,但无法弄清楚其余的出现。

使用的数据库是 SQL server 2014。

4

1 回答 1

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
于 2019-03-04T21:09:21.427 回答