2016-07-13 40 views
-2

我有一系列類似的字符串:查找T-SQL子串瓦特/不同的位置和長度

'...abcd=123-456-ABC,[email protected],...' 

我想的價值觀隔離的abcd & email,並將它們存儲在自己的變量。

我正在使用T-SQL。

+0

有什麼你嘗試用'T-SQL'寫作?你做過網絡搜索來找到「SUBSTRING」或「CHARINDEX」嗎? –

+0

'abcd =(。+),email =(。+),'類似的東西? – Confiqure

+0

嗨IMReal,這仍然是開放的嗎?你需要進一步的幫助嗎?請允許我提一個提示:在最佳答案的投票櫃檯下面勾選驗收檢查將是非常好的方法。這將1)標記此問題已解決2)使追隨者更容易找到最佳解決方案3)支付點給答覆者和4)支付點給你。一旦你跨越了15分的邊界,你就會被要求對投稿進行投票。這是SO的方式來說聲謝謝。快樂編碼! – Shnugo

回答

0

感謝您的答案,我能回答我的問題如下:

集STRING1 = SUBSTRING(TEXT,CHARINDEX('abcd =',TEXT)+5,CHARINDEX(',email',TEXT) - CHARINDEX('abcd =',TEXT)-5)

set string2 = SUBSTRING(TEXT,CHARINDEX('email =',TEXT)+6,CHARINDEX(',[next variable]',TEXT) - CHARINDEX('email =',TEXT)-6)

1

用T-SQL,你可以試試這個

DECLARE @tbl TABLE(ID INT, YourString NVARCHAR(100)); 
INSERT INTO @tbl VALUES 
(1,N'abcd=123-456-ABC,[email protected]') 
,(2,N'abcd=SomeOther,[email protected]') 
,(3,N'abcd=OneMore,other=123,AnOneMore=abc'); 

WITH Splitted AS 
(
    SELECT ID 
      ,CAST(N'<x>' + REPLACE((SELECT YourString AS [*] FOR XML PATH('')),N',',N'</x><x>') + N'</x>' AS XML) AS InParts 
    FROM @tbl 
) 
SELECT ID 
     ,LEFT(The.Part,CHARINDEX('=',The.Part)-1) AS Caption 
     ,SUBSTRING(The.Part,CHARINDEX('=',The.Part)+1,1000) AS Value 
FROM Splitted 
CROSS APPLY Splitted.InParts.nodes('/x') AS A(B) 
CROSS APPLY (SELECT B.value('.','nvarchar(max)')) AS The(Part) 

結果

ID Caption  Value 
1 abcd  123-456-ABC 
1 email  [email protected] 
2 abcd  SomeOther 
2 email  [email protected] 
3 abcd  OneMore 
3 other  123 
3 AnOneMore abc