首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL从字符串返回所有其他字符。

T-SQL从字符串返回所有其他字符。
EN

Stack Overflow用户
提问于 2018-04-23 19:08:19
回答 5查看 636关注 0票数 3

如何从特定的起始位置返回字符串中的每个其他字符?

示例:从第1位置开始

代码语言:javascript
复制
1050231

结果:

代码语言:javascript
复制
1521

从第2点开始

代码语言:javascript
复制
1050231

结果:

代码语言:javascript
复制
003
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-04-23 19:54:30

迟答,但这里还有另一个选择

示例

代码语言:javascript
复制
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('')
                   )

返回

代码语言:javascript
复制
NewValue
1521
票数 2
EN

Stack Overflow用户

发布于 2018-04-23 19:18:05

在SQL中,使用数字表通常是避免循环的最佳方法。如果您还没有数字表,那么您应该去阅读Jeff的“数字”或“计数”表:它是什么以及它是如何替换循环的

若要创建数字表,可以使用以下脚本:

代码语言:javascript
复制
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表,就可以使用它从字符串中选择特定的字符,如下所示:

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2018-04-23 19:14:11

一种方法使用递归CTE:

代码语言:javascript
复制
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;

这是一个雷克斯试验器

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49988290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档