首页 > 解决方案 > 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但我不知道如何开始。

任何帮助将非常感激。

标签: sqlsql-servercursorpatindex

解决方案


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

是一个 db<>fiddle。


推荐阅读