Name_Orig
列中的值如下所示:
**Ang-Stl-A36-6X4X.5**Angle,A36*,4X6X1/2****
我想要
这不是一个完整的表格,但是,这些条件集都在通用表表达式(CTE)中
我可以替换第一次出现的 ** 对于第二点和第三点,查询不起作用
CASE
When Name_Orig LIKE '**%' THEN 'Xx_'+ SUBSTRING(Name_Orig, 3, LEN(Name_Orig)-2)
WHEN CHARINDEX('**', Name_Orig, CHARINDEX('**', Name_Orig) + 1) > 0 THEN
REPLACE(STUFF(Name_Orig, CHARINDEX('**', Name_Orig, CHARINDEX('**', Name_Orig) + 1), 2, 'a_'), '*', ' ')
ELSE Name_Orig
END
使用 SQL Server 2005。
正如 Squirrel 所评论的,使用
patindex
找到第一个和第二个 **
,然后使用 replace
删除任何剩余的 8
。
select a.TestValue, replace(e.NewString,'*',' ')
from (
values ('**Ang-Stl-A36-6X4X.5**Angle,A36*,4X6X1/2****')
) a (TestValue)
cross apply (
values (patindex('%**%', a.TestValue))
) b (FirstPat)
cross apply (
values (case when b.FirstPat > 0 then substring(a.TestValue, 1, b.FirstPat - 1) + 'Xx_' + substring (a.TestValue, b.FirstPat + 2, len(a.TestValue)) else a.TestValue end)
) c (NewString)
cross apply (
values (patindex('%**%', c.NewString))
) d (SecondPat)
cross apply (
values (case when d.SecondPat > 0 then substring(c.NewString, 1, d.SecondPat - 1) + 'a_' + substring (c.NewString, d.SecondPat + 2, len(c.NewString)) else c.NewString end)
) e (NewString)
退货:
测试值 | 新价值 |
---|---|
Ang-Stl-A36-6X4X.5角度,A36*,4X6X1/2**** | Xx_Ang-Stl-A36-6X4X.5a_角度,A36,4X6X1/2 |