我正在使用SQL Server查询来获取列信息。但我需要一些信息,这是在第三次和第四次出现在那个特定的列
以下是我的示例数据
[xxxxxxx||gh||vbh||CAPACITY_CPU||aed]
[qwe34||asdf||qwe||CONNECTIVITY||ghj]
[ertgfy||fgv||yuhjj||ACCESS||rty]
[tyhuj||rtg||qwert||ACCESS||TMW]我正在寻找第三次和第四次出现||后的数据信息
就像这样
Capacity_CPU
CONNECTIVITY
ACCESS我的源列不是特定长度,它的长度会有所不同
发布于 2014-01-30 04:32:45
使用PATINDEX
为所需的列创建正则表达式,然后使用SUBSTRING提取所需的字符串
发布于 2014-01-30 05:56:31
可以混合使用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
`发布于 2014-01-30 06:23:51
1)您可以通过设计和添加一个新表来规范化数据库,而不是尝试对这些字符串执行此类操作。在这种情况下,您需要一个简单的SELECT:
SELECT Column4
FROM dbo.Table;2)否则,一种解决方案是将这些字符串转换为XML,并使用nodes和value 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)。长度。
https://stackoverflow.com/questions/21441775
复制相似问题