oracle中替换字段中指定字符串的语句

Posted

tags:

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

参考技术A 是这个意思吧?
sql>
select
regexp_replace('123|||456|||||789||191|000||234','(\|)2,','|')
regexp_replace
from
dual;
regexp_replace
-----------------------
123|456|789|191|000|234
sql>
参考技术B 可以通过replace函数来获取特定字符串后,进行字段更新实现:
sql:update
tablename
set
name=replace(name,'替换前字段','替换后字段')
where
name
like
'%替换前字段%'。
上面的sql语句的意思是替换tablename中name字段的“替换前字段“为”替换后字段“,
where后面的语句是筛选出字段中带有”替换前字段“的name值。

sql 删去记录中指定字符开头的字符串

想删去由“第”开头的字符串,比如“第12”,“第56”等,后面的数字不定,另外该字符串前后都有一个空格。请问应该怎么写SQL语句将这种字符串删除呢?

什么数据库
sqlserver中好像没有正则替换的函数,你得自己写了
CREATE FUNCTION dbo.regexReplace
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
RETURNS varchar(1000) AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @result varchar(5000)

EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
RETURN null
END

RETURN @result
END

我测试了一下,没有问题:(将字符'第'紧接后面连续出现的数字都替换成空)
print dbo.regexReplace('中国 统计 年鉴 2007 总 第26 期','第\d*','')
结果是 中国 统计 年鉴 2007 总 期
参考技术A delete from 表名 where 字段名 like ' 第%'

追问

这样是把符合条件的记录都删掉了吧?
是不是应该用update操作啊??

追答

哦,你是要替换啊。那用update

update 表名 set 字段名='' where 字段名 like ' 第%'

追问

怪我没说清楚。
除了“第%”,每条记录中还有其他字符串,比如“中国 古典文学 宝库 第65 辑 志 小说”,只是想把里面的“ 第65”去掉。类似的记录还有很多,数字不一样。

比如:
给水 排水 设计 手册 第10 技术 经济
新编 大学 英语 疑难 详解 第3
……
要把以上中“第”及其后面的数字去掉。变成如下:
给水 排水 设计 手册 技术 经济
新编 大学 英语 疑难 详解
……
麻烦再帮我想一下吧,非常感谢!

追答update 表名 
set 字段名=stuff(字段名,charindex(' 第',字段名),charindex(' ',substring(字段名,charindex(' 第',字段名)+1,len(字段名))),' ')
 where 字段名 like ' 第%'

第xx的前后都要有空格才行

追问

刚才试了一下,不知道为什么,0行受影响。没有成功。。是哪里出问题了吗??希望能再帮我解答一下!非常感谢!

参考技术B delete from 表名 where 字段名=‘12%’
直接删除这一行的数据,同时删除本行的自增列编号追问

我不想删掉这些记录,只是想删掉记录中特定的字符串。想知道怎么用更新操作实现?谢谢!

追答

那直接用Update改吧
update 表名 set 列1=值1 (可以有N个列同时更改,用','隔开) where 条件='12%'

追问

能不能写一条语句一起改了?分别针对每个不同的数字写一条太多太麻烦。
给水 排水 设计 手册 第10 技术 经济
新编 大学 英语 疑难 详解 第3
中国 统计 年鉴 2007 总 第26 期
……
要把以上中“第”及其后面的数字去掉。变成如下:
给水 排水 设计 手册 技术 经济
新编 大学 英语 疑难 详解
中国 统计 年鉴 2007 总 期
……

追答

能不能用null来代替或者用“ ”来代替

参考技术C delete from 表A where lefttrim(righttrim(字段名)) like '第%'追问

我不想删掉这些记录,只是想删掉记录中特定的字符串。

想用update操作实现。
还是很感谢!

追答

可以update 表A set 字段名= lefttrim(righttrim(字段名))
where l字段名 like '%第%'

或者
update 表A set 字段名= replace(字段名,' ','')
where l字段名 like '%第%'
括号里第一个单引号里面有一个空格

追问

真的很感谢!!
第一种不是很懂
怎么感觉第二种方法是把符合条件的记录中的空格都去掉啊。。

以上是关于oracle中替换字段中指定字符串的语句的主要内容,如果未能解决你的问题,请参考以下文章

sql 删去记录中指定字符开头的字符串

mysql 正则表达式 如何截取字符串中指定格式的字符

用hibernate怎么修改指定字段的值

linux下如何将第一行中指定的字符全部替换掉

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

sql中where截取字符串字符