我试图从主字符串中获取可变长度的字符串。 例如:
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 :(得分:0)
这部分是问题所在:
SELECT .....-CHARINDEX('*1*',data)+3
FROM .....
WHERE .....
你想用Endpos
减去所以它应该用括号写成:
-(CHARINDEX('*1*',data)+3)
如果删除括号,则最后一部分应变为-3
:
-CHARINDEX('*1*',data)-3