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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 替换 两特定字符(含特定字符)之间的字段相关的知识,希望对你有一定的参考价值。

如记录(字符型) abc?efg?hig
acb?mnz?xyz 只有两个?,且两?间字符串不一样,长度也不同
想要将两?号之间的字符串 替换为+
即结果为 abc+hig
acb+xyz
求sql server 语句

如果我说如果啊,如果是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需要试验才行,我这里可没有相关环境。
注:我忘了问号需不需要转译了,这个你自己试试看吧。
参考技术A 可以这样做:
declare @str varchar(50)
set @str='abc?efg?hig'
select REPLACE(@str,'?efg?','+')
参考技术B

你好!

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

希望对你有帮助!

追问

你好,sql server执行时
消息 195,级别 15,状态 10,第 6 行
'locate' 不是可以识别的 内置函数名称。

MYSQL中怎么替换某个字段值的空白值替换为特定值

UPDATE Content SET [分类]=replace([分类],'','24')用这个命令不行。替换不成功

参考技术A replace一般用于替换字段值中的一段字符串
整体替换直接使用where语句定位到空白字段再重新赋值即可:
UPDATE Content SET 分类='24' where 分类=''本回答被提问者采纳

以上是关于sql 替换 两特定字符(含特定字符)之间的字段的主要内容,如果未能解决你的问题,请参考以下文章

SQL中怎样写 被包含

SQL一字段内的字符串按照特定字符串转化为多行显示

根据 PL/SQL 中的特定条件替换 IP-address 中的最后一个字符串

如何用sql查询某值类型字段各个记录中含有的特定数字?

MYSQL中怎么替换某个字段值的空白值替换为特定值

用特定逻辑替换字符串中的字符