我正在使用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]
我正在寻找||
像
这样的东西Capacity_CPU
CONNECTIVITY
ACCESS
我的源列不是特定长度,它的长度会有所不同
答案 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并使用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)
。长度。