sql截取字符串并替换?

有两个表 dv_bbs1 dv_bbs2 现欲将两个表中字段Body里的字符串 "/8872X/"
替换为"/8872PL/"
查询语句为 select * from dv_bbs1 where Body like "?/8872x/?";
求截取字符串并将其替换的 sql语句

50分感谢 ! 检验可行之后 追加10分!
数据库是SQL2005
请看清楚 是截取 Body 字段中 的 字符串 "/8872X/" 并将其替换为"8872PL/"
update 语句只是将其更改 而并非替换
而且是将全部内容更改成"/8872pl/" (因为"/8872X/"的位置并不一定 所以需要一个函数) 其他内容就没了!!!

我知道是replace 和 subString 的函数调用 要求步骤啊
谢谢各位大大

郁闷了
Body数据类型是ntext类型 replace( )无效...

前面的分隔符取%,后面的分隔符是什么?就是说,以什么为分截取的依据?
没消息了?只好乱猜一下
假设你后面的特征是“0-9”或左圆括号“(”,那么可以这样:
select
left(
substring(字段名,charindex('%',字段名)+1,len(字段名)) ,
patindex('%[0-9(]%',substring(字段名,charindex('%',字段名)+1,len(字段名) )+'0' )-1
)说明:
先按你的方法截取%后面的字串,
然后再从左侧开始,截取到含有数字或左圆扩号的字符前面一个字符。
考虑到如果后面没有数字或扩号的情况,后面预加了0字符,这样当后面没有要求的字符时,会取百分号后面的所有字符。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-03
查询语句为 select * from dv_bbs1 where Body like "?/8872x/?";
求截取字符串并将其替换的 sql语句

你这个字段是否有规律?比如/8872x/前台有固定的字符数量??

update dv_bbs1 set Body="/8872PL/"
where Body="/8872X/"
第2个回答  2009-11-03
update dv_bbs1 set Body=replace(Body,'/8872X/','/8872PL/') where Body like '%/8872X/%'

这样不可以吗?

根本不用截取再替换啊?他自己找到这个字符串替换为一个字符串。我都执行N篇了.

SQL支持批量替换的。你想复杂了吧
第3个回答  2009-11-03
不需要subString只要replace就行了
update dv_bbs1 set body=replace(body,'/8872X/','8872PL/');

replace的用法:replace(f,str1,str2)
f字段用str1替换为str2
第4个回答  推荐于2016-02-04
update dv_bbs1
set body= REPLACE(body,'/8872X/','/8872PL/')

把ntext转换为nvarchar, 然后再replace用下面的:
declare @t table (id int,body Ntext)
insert into @t
select 1,N'qqqqqqqqqqqqqqqqqqqqqqqq/8872X/' union
select 2,N'/8872X/wwwwwwwwwwwwwwwwwwwwwww' union
select 3,N'1/8872X/1'

select * from @t

update @t
set body= REPLACE(cast(body as nvarchar),'/8872X/','/8872PL/')

select * from @t

--结果---
(3 row(s) affected)
id body
----------- -----------------
1 qqqqqqqqqqqqqqqqqqqqqqqq/8872X/
2 /8872X/wwwwwwwwwwwwwwwwwwwwwww
3 1/8872X/1

(3 row(s) affected)

(3 row(s) affected)

id body
----------- -------------------
1 qqqqqqqqqqqqqqqqqqqqqqqq/8872X
2 /8872PL/wwwwwwwwwwwwwwwwwwwwwww
3 1/8872PL/1

(3 row(s) affected)本回答被提问者采纳
相似回答