2014-01-29 68 views
1

我正在使用SQL Server查詢來獲取列信息。但我需要一些信息,這些信息在特定列如何獲取字符串中第m個和第n個之間的數據

這裏第三和第四發生後,我的樣本數據

[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

你在哪裏使用這個? PHP,Java,C#等等? – Hamza

+2

它被標記爲SQL並提及MS SQL Server –

+0

其ms sql服務器 – nitish

回答

0

使用PATINDEX

創建的正則表達式,你需要列,然後使用SUBSTRING提取字符串要

0

您可以使用SUBSTRING,CHARINDEX,左,右功能的混合物。最好的解決方案是你必須玩這個功能。

 ` 
       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

這裏我的文本字符串不受限制。它不限於最後一次出現||後有3個字符。它不斷變化。 – nitish

+0

你必須玩這個功能。沒有捷徑...... – Maverick

0

1)不要試圖用這些字符串做這樣的操作,你可以通過設計和添加一個新表來規範化數據庫。在這種情況下,你需要一個簡單的選擇:

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

相關問題