SQL Server中的字符串值移位



不知道如何清楚地描述我想要实现的目标,希望我下面的问题有意义。

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

_BCDEA_CDEAB_DEABC_EABCD_

因此,我想在所有可能的位置创建所有带有下划线的组合,以便在这样的查询中使用它们

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_

演示

相关内容

  • 没有找到相关文章

最新更新