博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
阅读量:4946 次
发布时间:2019-06-11

本文共 2437 字,大约阅读时间需要 8 分钟。

 

最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

 

 

为什么replace函数替换不了 ,请高手指点:http://bbs.csdn.net/topics/390625259

想把一个字符串中所有出现在delete_author表中的字符都删除掉(也就是替换成空)
delete_author表中的内容是:
我写成一个存储过程:(有些输出是为了测试)
create proc proc_del_special 
@input_str varchar(100),@output_str varchar(100) output
as
declare @author  varchar(256),@delsym varchar(10),@temp_str varchar(100)
declare del_cur scroll cursor for select del_author from delete_author
open del_cur
fetch next from del_cur into @delsym
set @author=@input_str
while @@fetch_status=0
     begin 
         print replace(@author,@delsym,'')
        set @temp_str=replace(@author,@delsym,'')
         set @author=@temp_str
         print @author
         print @delsym
         fetch next from del_cur into @delsym
     end 
set @output_str=@author
close del_cur
deallocate del_cur
测试例子:
declare @a1 varchar(100),@a2 varchar(100)
set @a1='(美)啊那编译'
exec proc_del_special @a1,@a2 output
select @a2
 
执行结果还是:(美)啊那编译 
执行过程中的消息:
美)啊那编译
(美)啊那编译
主编      
(美)啊那编译
(美)啊那编译
编译      
(美)啊那编译
(美)啊那编译
(美)      
(美)啊那编译
(美)啊那编译
(英)      
(美)啊那编译
(美)啊那编译
(苏)      
(美)啊那编译
(美)啊那编译
[等]      
(美)啊那编译
(美)啊那编译
(日)      
(美)啊那编译
(美)啊那编译
编著      
(美)啊那编译
(美)啊那编译
(西)      
(1 行受影响)
就是replace函数没有替换成功,这是为什么啊 ,请哪位大侠指点一下 ,在线等,非常感谢了
我的解法,
尽量少用游标,用函数也可以实现
--drop table tbcreate table tb(v nvarchar(100))insert into tbselect '(英)啊那编译' union allselect '小泉纯一郎(日)' union allselect '皇家马德里对(西)主编' union allselect '奥巴马(美)编著' union allselect '中国[等]'create table delete_author (del_author nvarchar(50))insert into delete_authorselect '主编' union allselect '编译' union allselect '(美)' union allselect '(英)' union allselect '(苏)' union allselect '[等]' union allselect '(日)' union allselect '编著' union allselect '(西)' if exists(select * from sys.objects where name = 'fn_replace_symbol')   drop function dbo.fn_replace_symbol;gocreate function dbo.fn_replace_symbol(@n nvarchar(1000))returns nvarchar(1000)asbegindeclare @i int;declare @count int;set @i = 1set @count = (select count(*) from delete_author);       while @i <= @countbegin   ;with t   as   (   select del_author,          row_number() over(order by @@servername) as rownum   from delete_author   )       select @n = replace(@n,(select del_author from t where rownum = @i),'')   set @i = @i + 1endreturn @nendgo--替换效果select * ,       dbo.fn_replace_symbol(v) as 替换完后的字符from tb/*v	                替换完后的字符(英)啊那编译	         啊那小泉纯一郎(日)	    小泉纯一郎皇家马德里对(西)主编	皇家马德里对奥巴马(美)编著	    奥巴马中国[等]	            中国*/

转载于:https://www.cnblogs.com/momogua/p/8304463.html

你可能感兴趣的文章
.NET 4 并行(多核)编程系列之一入门介绍
查看>>
C#开发微信公众平台-就这么简单(附Demo)
查看>>
自动注册 IIS6 的 MIME 类型
查看>>
用三张图片详解Asp.Net 全生命周期
查看>>
mapreduce处理气象数据-shell脚本处理气象数据
查看>>
java关键字之this关键
查看>>
十天冲刺计划
查看>>
mongoDB1--什么是mongoDB
查看>>
【转】Linux学习之路--启动VNC服务
查看>>
MongoDB 操作数据库
查看>>
bind9+mysql dlz(Dynamically Loadable Zones)
查看>>
centos7 安装teamviewer 报错libQt5WebKitWidgets.so.5()(64bit)
查看>>
从SQL Server CloudDBA 看云数据库智能化
查看>>
HTML5基础学习
查看>>
Copy一张图片
查看>>
禁止UINavigationController 左滑 返回的效果
查看>>
PYTHON_3和2
查看>>
json数组的取值方法
查看>>
选做Lintcode分类训练
查看>>
初识多进程
查看>>