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

时间:2014-01-29 20:19:22

标签: sql sql-server

我正在使用SQL Server查询来获取列信息。但我需要一些信息,这些信息是在该特定列中第3和第4次出现之后

这是我的示例数据

[xxxxxxx||gh||vbh||CAPACITY_CPU||aed]
[qwe34||asdf||qwe||CONNECTIVITY||ghj]
[ertgfy||fgv||yuhjj||ACCESS||rty]
[tyhuj||rtg||qwert||ACCESS||TMW]

我正在寻找||

第3次和第4次之后的数据信息

这样的东西
Capacity_CPU
CONNECTIVITY
ACCESS

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

3 个答案:

答案 0 :(得分:0)

使用PATINDEX

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

答案 1 :(得分:0)

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

      `
                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
      `

答案 2 :(得分:0)

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

SELECT Column4
FROM dbo.Table;

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

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)。长度。