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

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

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

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

比如有一个字段    题名

         1       水尼“十万”个为什么

         2      当代工人:市场化的演变与趋势

         3      当代画家  (东北卷)

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

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

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


  1. if object_id('t') is not null
  2. drop table t
  3. go
  4. create table t(id int,title nvarchar(100))
  5. insert into t
  6. select 1,'水尼“十万”个为什么' union all
  7. select 2,'当代工人:市场化的演变与趋势' union all
  8. select 3,'当代画家(东北卷)' union all
  9. select 4,'当代画家:“北京篇:;”'
  10. if object_id('symbol') is not null
  11. drop table symbol
  12. go
  13. --建立一个标点符号的表,你可以往里面加各种你想替换的标点符号
  14. create table symbol (n nvarchar(10));
  15. insert into symbol
  16. select '“' union all
  17. select '”' union all
  18. select ':' union all
  19. select ';'
  20. go
  21. if exists(select * from sys.objects where name = 'fn_replace_symbol')
  22. drop function dbo.fn_replace_symbol;
  23. go
  24. create function dbo.fn_replace_symbol(@n nvarchar(1000))
  25. returns nvarchar(1000)
  26. as
  27. begin
  28. declare @i int;
  29. declare @count int;
  30. set @i = 1
  31. set @count = (select count(*) from symbol);
  32. while @i <= @count
  33. begin
  34. ;with t
  35. as
  36. (
  37. select n,
  38. row_number() over(order by @@servername) as rownum
  39. from symbol
  40. )
  41. select @n = replace(@n,(select n from t where rownum = @i),'')
  42. set @i = @i + 1
  43. end
  44. return @n
  45. end
  46. go
  47. --替换效果
  48. select * ,
  49. dbo.fn_replace_symbol(title) as 替换完后的字符
  50. from t
  51. /*
  52. id title 替换完后的字符
  53. 1 水尼“十万”个为什么 水尼十万个为什么
  54. 2 当代工人:市场化的演变与趋势 当代工人市场化的演变与趋势
  55. 3 当代画家(东北卷) 当代画家(东北卷)
  56. 4 当代画家:“北京篇:;” 当代画家北京篇
  57. */

最新文章

  1. 无索引状态下比较DataTable的几种过滤方法效率
  2. android开发中获取&lt;meta-data&gt;数据
  3. centos7编译安装pure-ftpd-1.0.42
  4. Leetcode 1 Two Sum STL
  5. Sharepoint 2013 列表使用JS Link
  6. fuelSources
  7. The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
  8. poj 2553 强连通
  9. Oracle误删数据文件后出现oracle initialization or shutdown in progress解决
  10. [Swift]LeetCode783. 二叉搜索树结点最小距离 | Minimum Distance Between BST Nodes
  11. 构建高性能服务 Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue
  12. Redis集群(主从模式)
  13. week7
  14. Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar
  15. thread run 和 start 的区别
  16. luogu2865 路障 (dijkstra)
  17. react中跨域请求天气预报接口数据
  18. tensorflow入门笔记(四) tf.summary 模块
  19. 【托业】【新东方全真模拟】01~02-----P5~6
  20. SQL语句 查询同一个字符在某一个字符串中出现的次数

热门文章

  1. cv2.warpAffine 参数详解
  2. fingerprint for the ECDSA key
  3. Java Web J2EE下的两大框架SSH和SSM对比
  4. phpstorm yii2框架的redis和mongodb提示
  5. 【Java】Spring之控制反转(IoC)(二)
  6. VMware Workstation 将虚拟机挂起后,电脑会很卡,SCSI转换成IDE就可以了
  7. PP篇7 生产替代料齐套后处理
  8. Sound (audio file) player in java - working source code example
  9. 知识点-Spark小节
  10. Echart timeline 高级用法!!!!