2016-03-20 146 views
1

我想從主字符串中抓取可變長度字符串。 例子:從字符串中間拉取可變長度子字符串

ABC*12*1*name name****XX*123456789~ 
ABC*12*1*diffname diffname****XX*234567890~ 
ABC*12*1*diffname2 diffname2***XX*345678901~ 

我需要拉出的名字命名「, 'diffname diffname', 'diffname2 diffname2'

等從字符串。然後用星號替換名稱之間的''',但是,我不能在字符串的第一個空格中插入,可能會有多個名稱,所以我想要將'*'插入第二個或第三個空間,取決於名稱字符串的長度。

SELECT 
     CHARINDEX('*1*',data)+3 AS startpos, 
     CHARINDEX('***',data) AS Endpos, 
     data 
from #t 
where data like '%ABC*12*1*%' 

這給了我一個可變長度字符串的起點和終點。所以我嘗試:

SELECT SUBSTRING(data,CHARINDEX('*1*',data)+3,CHARINDEX('***',data) -CHARINDEX('*1*',data)+3) 
FROM #t 
WHERE data like '%ABC*12*1*name%' 

但是這給了我

name n name aa*****X 

結果集,基本上開始於起點,然後越過終點運行良好。

我在做什麼錯?

回答

0

這部分的問題是:

SELECT .....-CHARINDEX('*1*',data)+3 
FROM ..... 
WHERE ..... 

你想Endpos所以它應該是寫在括號中像這樣來。減去:

-(CHARINDEX('*1*',data)+3) 

,如果刪除方括號,最後一部分應該成爲-3

-CHARINDEX('*1*',data)-3 
+0

是的工作。謝謝!這是在殺我。它非常簡單.. – braindead

相關問題