2017-06-16 68 views
0
Company 1 [CRM] - Hong Kong - [10003086] (57464) 
Company 2  [SHP] Shanghai - [10003086] (12532) 

我想從字符串中提取括號之間的第二次出現。我試過的:獲取括號間的最後一個匹配

SELECT 
SUBSTRING(myid,CHARINDEX('(',myid)+1,(CHARINDEX(')',myid)-CHARINDEX('(',myid))-1) AS ID 
FROM dbo.CRM 

對於第一條記錄它返回我想要的數字'10003086'。對於第二條記錄,它返回'[SHP]'。如何確保查詢始終返回上次找到的結果?

回答

1

嘗試這種方式

DECLARE @str  VARCHAR(100)= 'Company 1 [CRM] - Hong Kong - [10003086] (57464)', 
     @fst_pos INT, 
     @lst_pos INT 

SELECT @fst_pos = Charindex('[', @str), 
     @lst_pos = Charindex(']', @str) 

SELECT Substring(@str, Charindex('[', @str, @fst_pos+1) + 1, Charindex(']', @str, @lst_pos + 1) - Charindex('[', @str, @fst_pos + 1) - 1)