2016-03-20 31 views
1

可変長文字列を主文字列から取得しようとしています。 例:文字列の中から可変長部分文字列を引き出す

私は '名前name'、 'diffname diffname'、 'diffname2 diffname2' という文字列から

などを引き出すために必要

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

。そして、アスタリスクで名前の間に ''を置き換えてください。ただし、文字列の最初のスペースに挿入するだけでは複数の名前がある可能性があります。したがって、2番目または3番目のスペースは、名前文字列の長さによって異なります。

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 

を与えます。

私は間違っていますか?

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

あなたはとてもそれはそうのようなカッコで書かれることになっEndposを減算するとします:

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

とブラケットが削除された場合、最後の部分

答えて

0

この部分は問題です-3

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

はい。ありがとうございました!これが私を殺していた。そして、とてもシンプルでした。 – braindead

関連する問題