ITPub博客

首页 > Linux操作系统 > Linux操作系统 > substr和instr的用法

substr和instr的用法

原创 Linux操作系统 作者:Kujasama 时间:2009-01-23 16:43:54 0 删除 编辑

oracle的substr函数的语法:

取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] )

substr('This is a test'62)     would return 'is'
substr(
'This is a test'6)     would return 'is a test'
substr(
'TechOnTheNet'-33)     would return 'Net'
substr(
'TechOnTheNet'-63)     would return 'The'

只取后5个字符串:

SQL> select substr('F_USER_ACTIONCODE',-5) from dual;

SUBSTR('F_USER_ACTIONCODE',-5)
------------------------------
NCODE

去除前5个字符串,只取后面的字符串:

SQL> select substr('F_USER_ACTIONCODE',5) from dual;

SUBSTR('F_USER_ACTIONCODE',5)
-----------------------------
ER_ACTIONCODE

 

可用 ||  进行拼接

SQL> select 'a'||substr('kuja',2) from dual;

 

'A'||SUBSTR('KUJA',2)

---------------------

Auja

结合这个用法,可以修改表中的一列字段

update temp2 set username='9y'||substr(username,1)||'st'

 

instr方法的格式

INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)

 

例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。

 

默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。

 

所以

 例1:

SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL

 

显示结果是

Instring

——————

14

 

关于这个结果是这样阅读的:从右开始找到第一个匹配‘OR’的字符串(即,最后一个OR),打印出的‘14’是从左开始数得到的位置。

 

例2:

SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -2) "Instring" FROM DUAL;

  Instring
----------
        13

SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -1) "Instring" FROM DUAL;

  Instring
----------
        13

 

以上2句sql的阅读方法:从右起第二的位置开始找第一次出现‘OO’的位置

                      从右起第一的位置开始找第一次出现‘OO’的位置

这样出来的结果就是一样的,因为从右起第一或第二开始找,找到的第一个‘OO’从左数起都是在第13个位置。

 

但是如果:

SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -4) "Instring" FROM DUAL;

  Instring
----------
         0

这样的话右起第四个字符已经跳过了‘OO’这样的话,就找不到了。

 

 

 

举一个简单的同时运用到substr和instr的sql:

update f_user set F_USER_ACTIONCODE=substr(F_USER_ACTIONCODE,0,INSTR(f_user_actioncode,'7000,')+4) where F_USER_ACTIONCODE like '%,8000,'

 

阅读方法:user_actioncode字段,第一次出现‘7000,’的位置n   加4

                      将含有‘8000,’的USER_ACTIONCODE字段,截取到‘7000,’为止

结果:

SQL> select substr('1000,7000,8000,',0,INSTR('1000,7000,8000,','7000,')+4) from dual;

SUBSTR('1000,7000,8000,',0,INS
------------------------------
1000,7000,

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13379967/viewspace-544544/,如需转载,请注明出处,否则将追究法律责任。

上一篇: mysql replication
请登录后发表评论 登录
全部评论

注册时间:2008-10-21

  • 博文量
    11
  • 访问量
    92960