sql 替换 两特定字符(含特定字符)之间的字段 5

如记录(字符型)abc?efg?higacb?mnz?xyz只有两个?,且两?间字符串不一样,长度也不同想要将两?号之间的字符串替换为+即结果为abc+higacb+xy... 如记录(字符型) abc?efg?hig
acb?mnz?xyz 只有两个?,且两?间字符串不一样,长度也不同
想要将两?号之间的字符串 替换为+
即结果为 abc+hig
acb+xyz
求sql server 语句
展开
 我来答
longrenyingdc8ecb1
2019-06-24 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2326万
展开全部
如果我说如果啊,如果是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需要试验才行,我这里可没有相关环境。
注:我忘了问号需不需要转译了,这个你自己试试看吧。
lishan2100
2019-06-24 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:164
采纳率:57%
帮助的人:43.7万
展开全部
可以这样做:
declare @str varchar(50)
set @str='abc?efg?hig'
select REPLACE(@str,'?efg?','+')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿刚炖蛋
2019-06-24 · TA获得超过3004个赞
知道大有可为答主
回答量:1789
采纳率:92%
帮助的人:984万
展开全部

你好!

如果格式固定为只有2个?的话,mysql下面,可以这样:

希望对你有帮助!

追问
你好,sql server执行时
消息 195,级别 15,状态 10,第 6 行
'locate' 不是可以识别的 内置函数名称。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式