不知道如何清楚地描述我想要实现的目标,希望我下面的问题有意义。
假设我有字符串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;
这是一个数据库<>不停摆弄
不使用Recursive CTE
的尝试。但是,在处理大型字符串时要小心处理,因为replicate
有其局限性。
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_
演示