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
……
要把以上中“第”及其后面的数字去掉。变成如下:
给水 排水 设计 手册 技术 经济
新编 大学 英语 疑难 详解
……
麻烦再帮我想一下吧,非常感谢!
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中替换字段中指定字符串的语句的主要内容,如果未能解决你的问题,请参考以下文章