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_
不确定如何清楚地描述我想要实现的目标,希望我下面的问题有一定道理。
假设我有字符串 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_