首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取字符串中第m次和第n次之间的数据

如何获取字符串中第m次和第n次之间的数据
EN

Stack Overflow用户
提问于 2014-01-30 04:19:22
回答 3查看 359关注 0票数 1

我正在使用SQL Server查询来获取列信息。但我需要一些信息,这是在第三次和第四次出现在那个特定的列

以下是我的示例数据

代码语言:javascript
复制
[xxxxxxx||gh||vbh||CAPACITY_CPU||aed]
[qwe34||asdf||qwe||CONNECTIVITY||ghj]
[ertgfy||fgv||yuhjj||ACCESS||rty]
[tyhuj||rtg||qwert||ACCESS||TMW]

我正在寻找第三次和第四次出现||后的数据信息

就像这样

代码语言:javascript
复制
Capacity_CPU
CONNECTIVITY
ACCESS

我的源列不是特定长度,它的长度会有所不同

EN

回答 3

Stack Overflow用户

发布于 2014-01-30 04:32:45

使用PATINDEX

为所需的列创建正则表达式,然后使用SUBSTRING提取所需的字符串

票数 0
EN

Stack Overflow用户

发布于 2014-01-30 05:56:31

可以混合使用SUBSTRING、CHARINDEX、LEFT和RIGHT函数。最好的解决方案是你必须使用这个函数。

代码语言:javascript
复制
      `
                Create table #t( Name varchar(200))

            Insert into #t
            values
            ('[xxxxxxx||gh||vbh||CAPACITY_CPU||aed]'),
            ('[qwe34||asdf||qwe||CONNECTIVITY||ghj]'),
            ('[ertgfy||fgv||yuhjj||ACCESS||rty]'),
            ('[tyhuj||rtg||qwert||ACCESS||TMW]') 

            Select * from #t

            Select 
            name,
            Right(LEFT(name,len(name)-6),charindex('||',reverse(LEFT(name,len(name)-7))))
            From #t
      `
票数 0
EN

Stack Overflow用户

发布于 2014-01-30 06:23:51

1)您可以通过设计和添加一个新表来规范化数据库,而不是尝试对这些字符串执行此类操作。在这种情况下,您需要一个简单的SELECT:

代码语言:javascript
复制
SELECT Column4
FROM dbo.Table;

2)否则,一种解决方案是将这些字符串转换为XML,并使用nodesvalue XML方法:

代码语言:javascript
复制
DECLARE @Source NVARCHAR(MAX);
SET @Source = 
N'[xxxxxxx||gh||vbh||CAPACITY_CPU||aed]
[qwe34||asdf||qwe||CONNECTIVITY||ghj]
[ertgfy||fgv||yuhjj||ACCESS||rty]
[tyhuj||rtg||qwert||ACCESS||TMW]';

DECLARE @EncodedSource NVARCHAR(MAX);
SET @EncodedSource = (SELECT @source FOR XML PATH(''));

DECLARE @x XML;
SET @x = REPLACE(REPLACE(REPLACE(@EncodedSource, N'[', N'<row> <col>'), N']', N'"</col> </row>'), N'||', N'</col> <col>');

SELECT  r.XmlContent.value('(col[1]/text())[1]', 'NVARCHAR(100)') AS Col1,
        r.XmlContent.value('(col[4]/text())[1]', 'NVARCHAR(100)') AS Col4
FROM    @x.nodes('/row') r(XmlContent);

注意:您需要用适当的数据类型和最大值替换NVARCHAR(length)。长度。

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

https://stackoverflow.com/questions/21441775

复制
相关文章

相似问题

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