当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

substr、replace函数简单应用

ORACLE接触的久了,我的大脑也开始遵循LRU原则,不常用的知识很快就会被刷新掉,为了和ORACLE一样保证数据一致性,只好将这些东西保存到硬盘上。
前段时间数据已经加载到数据库,最近一直做的是整理这些数据,SUBSTR和REPLACE函数用的比较多, 这里简单记录下。
有一张存放图片的表,包含以下字段,IDENTIFIER是档号,JPG_PATH是图片的路径和名字,其他字段这里没有用到,不做描述。

SQL> select id,IDENTIFIER,JPG_PATH from images where rownum<11;
      ID   IDENTIFIER    JPG_PATH
--------   -----------   ----------------------------------
       1                 /waiwubu/0220/18-0220-003-0001.JPG
       2                 /waiwubu/0221/18-0221-003-0001.JPG
       3                 /waiwubu/0221/18-0221-003-0002.JPG
       4                 /waiwubu/0221/18-0221-003-0003.JPG
       5                 /waiwubu/0223/18-0223-005-0001.JPG
       6                 /waiwubu/0223/18-0223-005-0002.JPG
       7                 /waiwubu/0223/18-0223-005-0003.JPG
       8                 /waiwubu/0223/18-0223-005-0004.JPG
       9                 /waiwubu/0223/18-0223-005-0005.JPG
      10                 /waiwubu/0223/18-0223-005-0006.JPG

10 rows selected.

图片是用SQLLDR工具加载到数据库,夹在是只知道图片的路径和名字,并不知道档号信息,但是知道图片名字去除最后一个”-“后面的部分就是档号,而且档号字段用来和其他表关联,必须要有档号的信息,就需要利用JPG_PATH字段来生成档号信息,就需要利用截断函数SUBSTR了,这里SUBSTR函数的用法如下:

SQL> update images set identifier=substr(jpg_path,15,11) where rownum<11;

10 rows updated.

这里SUBSTR函数用到了3个参数,jpg_path是要截取的字段名字,后面的“15”是表示从第几位开始截取,如果后面不再加数值,表示一直截取到最后,这里的第三个参数“11”表示一共截取多少位,也就是截取多长的意思,如下:

QL> select id,IDENTIFIER,JPG_PATH from images where rownum<11;
      ID   IDENTIFIER    JPG_PATH
--------   -----------   ----------------------------------
       1   18-0220-003   /waiwubu/0220/18-0220-003-0001.JPG
       2   18-0221-003   /waiwubu/0221/18-0221-003-0001.JPG
       3   18-0221-003   /waiwubu/0221/18-0221-003-0002.JPG
       4   18-0221-003   /waiwubu/0221/18-0221-003-0003.JPG
       5   18-0223-005   /waiwubu/0223/18-0223-005-0001.JPG
       6   18-0223-005   /waiwubu/0223/18-0223-005-0002.JPG
       7   18-0223-005   /waiwubu/0223/18-0223-005-0003.JPG
       8   18-0223-005   /waiwubu/0223/18-0223-005-0004.JPG
       9   18-0223-005   /waiwubu/0223/18-0223-005-0005.JPG
      10   18-0223-005   /waiwubu/0223/18-0223-005-0006.JPG

10 rows selected.

这里如果不加第三个参数“11”的话,结果会从第15位一直截取到最后,结果如下:

SQL> update images set identifier=substr(jpg_path,15) where rownum<11;

10 rows updated.

SQL> select id,IDENTIFIER,JPG_PATH from images where rownum<11;
      ID   IDENTIFIER             JPG_PATH
--------   --------------------   ----------------------------------
       1   18-0220-003-0001.JPG   /waiwubu/0220/18-0220-003-0001.JPG
       2   18-0221-003-0001.JPG   /waiwubu/0221/18-0221-003-0001.JPG
       3   18-0221-003-0002.JPG   /waiwubu/0221/18-0221-003-0002.JPG
       4   18-0221-003-0003.JPG   /waiwubu/0221/18-0221-003-0003.JPG
       5   18-0223-005-0001.JPG   /waiwubu/0223/18-0223-005-0001.JPG
       6   18-0223-005-0002.JPG   /waiwubu/0223/18-0223-005-0002.JPG
       7   18-0223-005-0003.JPG   /waiwubu/0223/18-0223-005-0003.JPG
       8   18-0223-005-0004.JPG   /waiwubu/0223/18-0223-005-0004.JPG
       9   18-0223-005-0005.JPG   /waiwubu/0223/18-0223-005-0005.JPG
      10   18-0223-005-0006.JPG   /waiwubu/0223/18-0223-005-0006.JPG

10 rows selected.

在更新完图片表的档号字段后,文件表根据档号字段就可以好图片表关联查找到图片信息,但是测试后发现,个别条目数据并不能挂载到图片,经查发现是文件表的档号字段由于历史数据错误,部分存在空格,如下:

SQL> select ''''||IDENTIFIER||'''' from t_file_info where IDENTIFIER like '% %and rownum<2;

IDENTIFIER
---------------
'18-0223-005  '

由于存在多余的空格,在图片表里查询不到这些有空格的档号,所以会挂接不上,这样就需要将这些多余的空格替换掉,这里用到了REPLACE函数。

SQL> update t_file_info set identifier=replace(identifier,' ','')where IDENTIFIER like '% % and rownum<2;

1 rows updated.

这里REPLACE函数也用到了3个参数,第一个参数(identifier)是要替换的字段名字,第二个参数(’ ‘),是要替换的内容,这里是空格,第三个字段(‘’)是替换成什么内容,这里两个单引号之间什么也没有,表示将空格替换成空,也就相当于将空格删除,替换后数据如下:

SQL> select ''''||IDENTIFIER||'''' from t_file_info where IDENTIFIER like '% %and rownum<2;

IDENTIFIER
---------------
'18-0223-005'

删除掉多余的空格,条目数据已经可以和图片正确挂接。

本文固定链接: http://www.dbdream.com.cn/2012/08/substr%e3%80%81replace%e5%87%bd%e6%95%b0%e7%ae%80%e5%8d%95%e5%ba%94%e7%94%a8/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2012年08月08日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: substr、replace函数简单应用 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , ,

substr、replace函数简单应用:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter