sql 替换 两特定字符(含特定字符)之间的字段 5
如记录(字符型)abc?efg?higacb?mnz?xyz只有两个?,且两?间字符串不一样,长度也不同想要将两?号之间的字符串替换为+即结果为abc+higacb+xy...
如记录(字符型) abc?efg?hig
acb?mnz?xyz 只有两个?,且两?间字符串不一样,长度也不同
想要将两?号之间的字符串 替换为+
即结果为 abc+hig
acb+xyz
求sql server 语句 展开
acb?mnz?xyz 只有两个?,且两?间字符串不一样,长度也不同
想要将两?号之间的字符串 替换为+
即结果为 abc+hig
acb+xyz
求sql server 语句 展开
3个回答
展开全部
如果我说如果啊,如果是abc?def?ghi?jkl你打算怎么换是abc+jkl还是abc++jkl,当然如果没有这种情况算我没说。
还有你什么数据库啊,不同的数据库用到的函数也不是完全一样的。当然如果都是三位的那就简单了,如果不都是3位的,那在用下面的方法
比如定位中oracle用instr,sqlserver中用charindex
(1)定位,定位?的位置,不知道你的?是不是字符型的,我假设它是字符型的
oracle:instr('?',字段,1,1)(第一次出现问号的位置),instr('?',字段,-1,1)(最后一次出现问号的位置),如果只有两个问号也可以写成instr('?',字段,1,2)
sqlserver:charindex('?',字段,1)(第一次出现问号),len(字段)-(charindex('?',reverse(字段))-1)(最后一次出现问号),如果只有两个问号,可以写成charindex('?',字段,charindex('?',字段,1)+1)
(2)截取需要替换的字符串substring函数,这个二者基本差不多
(3)替换,二者也是大同小异(函数基本相同,但写法上有些区别),我就写一个。
oracle: select replace(字段,subter(字段,instr('?',字段,1,1),instr('?',字段,-1,1)),'+') from table
至于sqlserver的那就自己完成吧,oracle我的把握大一些,sqlserver需要试验才行,我这里可没有相关环境。
注:我忘了问号需不需要转译了,这个你自己试试看吧。
还有你什么数据库啊,不同的数据库用到的函数也不是完全一样的。当然如果都是三位的那就简单了,如果不都是3位的,那在用下面的方法
比如定位中oracle用instr,sqlserver中用charindex
(1)定位,定位?的位置,不知道你的?是不是字符型的,我假设它是字符型的
oracle:instr('?',字段,1,1)(第一次出现问号的位置),instr('?',字段,-1,1)(最后一次出现问号的位置),如果只有两个问号也可以写成instr('?',字段,1,2)
sqlserver:charindex('?',字段,1)(第一次出现问号),len(字段)-(charindex('?',reverse(字段))-1)(最后一次出现问号),如果只有两个问号,可以写成charindex('?',字段,charindex('?',字段,1)+1)
(2)截取需要替换的字符串substring函数,这个二者基本差不多
(3)替换,二者也是大同小异(函数基本相同,但写法上有些区别),我就写一个。
oracle: select replace(字段,subter(字段,instr('?',字段,1,1),instr('?',字段,-1,1)),'+') from table
至于sqlserver的那就自己完成吧,oracle我的把握大一些,sqlserver需要试验才行,我这里可没有相关环境。
注:我忘了问号需不需要转译了,这个你自己试试看吧。
展开全部
可以这样做:
declare @str varchar(50)
set @str='abc?efg?hig'
select REPLACE(@str,'?efg?','+')
declare @str varchar(50)
set @str='abc?efg?hig'
select REPLACE(@str,'?efg?','+')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询