如何从特定的起始位置返回字符串中的每个其他字符?
示例:从第1位置开始
1050231结果:
1521从第2点开始
1050231结果:
003发布于 2018-04-23 19:54:30
迟答,但这里还有另一个选择
示例
Declare @S varchar(max) = '1050231'
Declare @P int =1
Select NewValue = (Select substring(substring(@S,@P,len(@S)),N,1)
From (Select Top (len(@S)-@P+1) N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1) A
Where N%2=1
For XML Path('')
)返回
NewValue
1521发布于 2018-04-23 19:18:05
在SQL中,使用数字表通常是避免循环的最佳方法。如果您还没有数字表,那么您应该去阅读Jeff的“数字”或“计数”表:它是什么以及它是如何替换循环的。
若要创建数字表,可以使用以下脚本:
SELECT TOP 10000 IDENTITY(int,1,1) AS Number
INTO Numbers
FROM sys.objects s1
CROSS JOIN sys.objects s2
ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)既然有了numbers表,就可以使用它从字符串中选择特定的字符,如下所示:
DECLARE @s varchar(20) = '1050231',
@Start int = 1
SELECT Substring(@s, Number, 1)
FROM Numbers
WHERE Number >= @Start
AND (Number - @Start) % 2 = 0
AND Number <= DATALENGTH(@s)发布于 2018-04-23 19:14:11
一种方法使用递归CTE:
with cte as (
select @pos as pos, @str as str
union all
select pos + 2, str
from cte
where pos + 2 <= len(@str)
)
select substring(str, pos, 1)
from cte;这是一个雷克斯试验器。
https://stackoverflow.com/questions/49988290
复制相似问题