阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

【LOB】clob 字段中字符串如何替换

192次阅读
没有评论

共计 2438 个字符,预计需要花费 7 分钟才能阅读完成。

一、场景描述

     业务需求,现在有张业务表的一个字段为 clob 类型,要将该字段中部分内容的日期 ’2016 年 04 月 22 日’修改为 ’2016 年 04 月 11 日’,该替换需要用到 replace 参数,注意:Oracle 10g 版本以上可使用 regexp_replace 参数。让我们实验来用用看。
 
二、实验
1. 创建测试表及数据

  1. SAM@OCM11G >create table test_lob(id number,text clob);
  2. Table created.
2. 修改系统字符集,否则插入中文为乱码
 

  1. [oracle@test ~]$ echo $LANG
  2. en_US.UTF8
  3. [oracle@test ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
  4. [oracle@test ~]$ echo $NLS_LANG
  5. AMERICAN_AMERICA.AL32UTF8
3. 插入测试数据

  1. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (1,‘ 你好,这里是 SAM1 的测试环境。2016 年 12 月 30 日 ’);
  2. 1 row created.
  3. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (2,‘ 你好,这里是 SAM2 的测试环境。2016 年 12 月 30 日 ’);
  4. 1 row created.
  5. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (3,‘ 你好,这里是 SAM3 的测试环境。2016 年 12 月 30 日 ’);
  6. 1 row created.
  7. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (4,‘ 你好,这里是 SAM4 的测试环境。2016 年 12 月 30 日 ’);
  8. 1 row created.
  9. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (5,‘ 你好,这里是 SAM5 的测试环境。2016 年 12 月 30 日 ’);
  10. 1 row created.
  11. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (6,‘ 你好,这里是 SAM6 的测试环境。2016 年 12 月 30 日 ’);
  12. 1 row created.
  13. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (7,‘ 你好,这里���SAM7 的测试环境。2016 年 12 月 30 日 ’);
  14. 1 row created.
  15. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (8,‘ 你好,这里是 SAM8 的测试环境。2016 年 12 月 30 日 ’);
  16. 1 row created.
  17. SAM@OCM11G >commit;
  18. Commit complete.
  19. SAM@OCM11G >set lines 200
  20. SAM@OCM11G >select * from test_lob;
  21.         ID TEXT
  22. ———- ——————————————————————————–
  23.          1 你好,这里是 SAM1 的测试环境。2016 年 12 月 30 日
  24.          2 你好,这里是 SAM2 的测试环境。2016 年 12 月 30 日
  25.          3 你好,这里是 SAM3 的测试环境。2016 年 12 月 30 日
  26.          4 你好,这里是 SAM4 的测试环境。2016 年 12 月 30 日
  27.          5 你好,这里是 SAM5 的测试环境。2016 年 12 月 30 日
  28.          6 你好,这里是 SAM6 的测试环境。2016 年 12 月 30 日
  29.          7 你好,这里是 SAM7 的测试环境。2016 年 12 月 30 日
  30.          8 你好,这里是 SAM8 的测试环境。2016 年 12 月 30 日
  31. 8 rows selected.
4. 修改 lob 字段中信息日期语法


  1. UPDATE table t
  2.    SET t.lob 字段名 = REPLACE(t.lob 字段名 ,‘替换前内容‘, ‘ 替换后内容‘)
  3.  WHERE t.sale like ‘%替换前%;
5. 修改 lob 字段中 2016 年 12 月 30 日为 2017 年 01 月 07 日
 
 


  1. SAM@OCM11G >update test_lob t set t.text=replace(text,‘2016 年 12 月 30 日 ’,‘2017 年 01 月 07 日 ’) where text like ‘%2016 年 12 月 30 日 %’;
  2. 8 rows updated.
  3. SAM@OCM11G >commit;
6. 验证修改后的信息
 


  1. SAM@OCM11G >select * from test_lob;
  2.         ID TEXT
  3. ———- ——————————————————————————–
  4.          1 你好,这里是 SAM1 的测试环境。2017 年 01 月 07 日
  5.          2 你好,这里是 SAM2 的测试环境。2017 年 01 月 07 日
  6.          3 你好,这里是 SAM3 的测试环境。2017 年 01 月 07 日
  7.          4 你好,这里是 SAM4 的测试环境。2017 年 01 月 07 日
  8.          5 你好,这里是 SAM5 的测试环境。2017 年 01 月 07 日
  9.          6 你好,这里是 SAM6 的测试环境。2017 年 01 月 07 日
  10.          7 你好,这里是 SAM7 的测试环境。2017 年 01 月 07 日
  11.          8 你好,这里是 SAM8 的测试环境。2017 年 01 月 07 日
  12. 8 rows selected.
三、总结
    修改 LOB 字段信息中的字符串,不能按照以往的的 update 表名 set 字段名 = 新值 where …。正确的方法是使用 REPLACE 函数来替换。注意 where 条件就好,借着新年,也祝各位 DBA 朋友们,HAPPY NEW YEAR. 

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139388.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2438字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中