sql截取字符串并替换?

2025-05-23 21:06:12
推荐回答(5个)
回答(1):

前面的分隔符取%,后面的分隔符是什么?就是说,以什么为分截取的依据?
没消息了?只好乱猜一下
假设你后面的特征是“0-9”或左圆括号“(”,那么可以这样:
select
left(
substring(字段名,charindex('%',字段名)+1,len(字段名)) ,
patindex('%[0-9(]%',substring(字段名,charindex('%',字段名)+1,len(字段名) )+'0' )-1
)说明:
先按你的方法截取%后面的字串,
然后再从左侧开始,截取到含有数字或左圆扩号的字符前面一个字符。
考虑到如果后面没有数字或扩号的情况,后面预加了0字符,这样当后面没有要求的字符时,会取百分号后面的所有字符。

回答(2):

查询语句为 select * from dv_bbs1 where Body like "?/8872x/?";
求截取字符串并将其替换的 sql语句

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

update dv_bbs1 set Body="/8872PL/"
where Body="/8872X/"

回答(3):

update dv_bbs1 set Body=replace(Body,'/8872X/','/8872PL/') where Body like '%/8872X/%'

这样不可以吗?

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

SQL支持批量替换的。你想复杂了吧

回答(4):

不需要subString只要replace就行了
update dv_bbs1 set body=replace(body,'/8872X/','8872PL/');

replace的用法:replace(f,str1,str2)
f字段用str1替换为str2

回答(5):

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)