SQL Server中的字符串值转移

SQL Server中的字符串值转移,sql,sql-server,cursor,patindex,Sql,Sql Server,Cursor,Patindex,不知道如何清楚地描述我想要实现的目标,希望我下面的问题有一定的意义 让我们假设我有ABCDE这个字符串。我想迭代它的长度,以创建字符串的移位模式,如下所示 _BCDE、A_CDE、AB_DE、ABC_E、ABCD_ 因此,我想在所有可能的位置创建带有下划线的所有组合,以便在如下查询中使用它们 DECLARE @WORD AS NVARCHAR(50) SET @WORD = 'ABCDE' SELECT position = PATINDEX(CONCAT('%', @WORD, '%'), '

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

让我们假设我有ABCDE这个字符串。我想迭代它的长度,以创建字符串的移位模式,如下所示

_BCDE、A_CDE、AB_DE、ABC_E、ABCD_

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

DECLARE @WORD AS NVARCHAR(50)
SET @WORD = 'ABCDE'
SELECT position = PATINDEX(CONCAT('%', @WORD, '%'), 'BGHKAGCDEBABIDEKFABCREDNBSALCDEOPL'); 
其中@WORD应该是带有x的单词

我觉得这可以使用递归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;

是一个dbfiddle。

您可以使用递归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;

是一个dbfiddle。

不使用递归CTE的尝试。但在处理大字符串时要小心处理,因为replicate有它自己的特性


不使用递归CTE的尝试。但在处理大字符串时要小心处理,因为replicate有它自己的特性

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