SQL 服务器中的字符串值移位

String value shifting in SQL Server

不确定如何清楚地描述我想要实现的目标,希望我下面的问题有一定道理。

假设我有字符串 ABCDE。我想迭代其长度的次数以创建字符串的移位模式,如下所示

_BCDE,A_CDE,AB_DE,ABC_E,ABCD_

所以我想在所有可能的位置创建所有带下划线的组合,以便在

这样的查询中使用它们
DECLARE @WORD AS NVARCHAR(50)
SET @WORD = 'ABCDE'
SELECT position = PATINDEX(CONCAT('%', @WORD, '%'), 'BGHKAGCDEBABIDEKFABCREDNBSALCDEOPL'); 

@WORD 应该是带有 _.

的单词

我觉得这可以使用递归来完成 CTE 但我不确定如何开始。

如有任何帮助,我们将不胜感激。

您可以使用递归 CTE:

DECLARE @WORD AS NVARCHAR(50);
SET @WORD = 'ABCDE';

with cte as (
      select 1 as n, @word as word
      union all
      select n + 1, word
      from cte
      where n < len(word)
     )
select word, stuff(word, n, 1, '_')
from cte;

Here 是一个 db<>fiddle.

不使用 Recursive CTE 的尝试。但是在处理大字符串时要小心处理,因为 replicate 有它的 limitations

with cte1 as (select 'abcde' as txt)

select value, stuff(value, row_number() over (order by value), 1, '_') as permutations
from cte1
cross apply string_split(replicate(txt+'.',len(txt+'.')-1),'.')
where value<>'';

输出

value   permutations
abcde   _bcde
abcde   a_cde
abcde   ab_de
abcde   abc_e
abcde   abcd_

DEMO