在论坛中出现的比较难的sql问题:13(循环替换问题 过滤各种标点符号)

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

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


去掉一个字段中的标点符号的SQL语句怎么写

http://bbs.csdn.net/topics/390621077?page=1#post-395850514

比如有一个字段    题名
         1       水尼“十万”个为什么
         2      当代工人:市场化的演变与趋势
         3      当代画家  (东北卷)

想把这个字段中的标点符号去掉,请教各位大侠SQL 语句该怎么写。

我的解法是,通过新建一个符号表,里面存储要替换的各种符号,然后通过循环,把这些符号替换了,

如果数据多了,应该效率不太好:

if object_id('t') is not null
   drop table t
go

create table t(id int,title nvarchar(100))

insert into t
select 1,'水尼“十万”个为什么' union all
select 2,'当代工人:市场化的演变与趋势' union all
select 3,'当代画家(东北卷)' union all
select 4,'当代画家:“北京篇:;”'


if object_id('symbol') is not null
   drop table symbol
go

--建立一个标点符号的表,你可以往里面加各种你想替换的标点符号
create table symbol (n nvarchar(10));

insert into symbol
select '“' union all
select '”' union all
select ':' union all
select ';'

go


if exists(select * from sys.objects where name = 'fn_replace_symbol')
   drop function dbo.fn_replace_symbol;
go

create function dbo.fn_replace_symbol(@n nvarchar(1000))
returns nvarchar(1000)
as
begin
declare @i int;
declare @count int;

set @i = 1
set @count = (select count(*) from symbol);
       
while @i <= @count
begin
   ;with t
   as
   (
   select n,
          row_number() over(order by @@servername) as rownum
   from symbol
   )
    
   select @n = replace(@n,(select n from t where rownum = @i),'')
   set @i = @i + 1
end

return @n
end
go

--替换效果
select * ,
       dbo.fn_replace_symbol(title) as 替换完后的字符
from t
/*
id	title	                      替换完后的字符
1	水尼“十万”个为什么	           水尼十万个为什么
2	当代工人:市场化的演变与趋势	  当代工人市场化的演变与趋势
3	当代画家(东北卷)	           当代画家(东北卷)
4	当代画家:“北京篇:;”	      当代画家北京篇
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值