sql截取字符串并替换?

有两个表dv_bbs1dv_bbs2现欲将两个表中字段Body里的字符串"/8872X/"替换为"/8872PL/"查询语句为select*fromdv_bbs1wher... 有两个表 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( )无效...
展开
 我来答
尾暖姝琦方
2019-09-05 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:33%
帮助的人:640万
展开全部
前面的分隔符取%,后面的分隔符是什么?就是说,以什么为分截取的依据?
没消息了?只好乱猜一下
假设你后面的特征是“0-9”或左圆括号“(”,那么可以这样:
select
left(
substring(字段名,charindex('%',字段名)+1,len(字段名)) ,
patindex('%[0-9(]%',substring(字段名,charindex('%',字段名)+1,len(字段名) )+'0' )-1
)说明:
先按你的方法截取%后面的字串,
然后再从左侧开始,截取到含有数字或左圆扩号的字符前面一个字符。
考虑到如果后面没有数字或扩号的情况,后面预加了0字符,这样当后面没有要求的字符时,会取百分号后面的所有字符。
百度网友a800768
2009-11-03 · TA获得超过1841个赞
知道大有可为答主
回答量:1928
采纳率:0%
帮助的人:1710万
展开全部
查询语句为 select * from dv_bbs1 where Body like "?/8872x/?";
求截取字符串并将其替换的 sql语句

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

update dv_bbs1 set Body="/8872PL/"
where Body="/8872X/"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zengwei61
2009-11-03 · TA获得超过113个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:117万
展开全部
update dv_bbs1 set Body=replace(Body,'/8872X/','/8872PL/') where Body like '%/8872X/%'

这样不可以吗?

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

SQL支持批量替换的。你想复杂了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chw_888
2009-11-03 · TA获得超过759个赞
知道小有建树答主
回答量:647
采纳率:0%
帮助的人:0
展开全部
不需要subString只要replace就行了
update dv_bbs1 set body=replace(body,'/8872X/','8872PL/');

replace的用法:replace(f,str1,str2)
f字段用str1替换为str2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e6ea01f
推荐于2016-02-04 · TA获得超过449个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:537万
展开全部
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)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式