2016-07-13 12 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