Oracle中的instr和substr函数用法

来源:互联网 发布:华南师范大学 网络缴费 编辑:程序博客网 时间:2024/04/20 02:20

数据库类型:Oracle

一、

函数:instr(String,str[,start_position[,times_appearence]])

作用:返回str在string中的位置。

参数:

String:字符;

str:目标字符;

start_position:查找的起始位置,默认是1,表示从第一个字符开始查找。

times_appearence:查找第几次出现的str,默认是1,表示查找的是第一次出现的str。

解释:

中括号表示:括号中的内容可有可无;

中括号中的中括号表示:必须先有外面中括号的参数,然后才会可以设置内中括号的参数。

举例:

Oracle中:select instr (name,'c',1,2) as position from test;

结果:



二、

函数:substr(字符串,截取开始位置,截取长度)

作用:从某位置开始,截取该字符串指定长度内的内容。

参数:

字符串:操作字符串;

截取开始位置:0和1均表示从开始位置截取;(所以2就代表第二个位置,3就代表第三个位置,以此类推);

截取长度:截取的字符串的长度;

举例:

Oracle:select name , substr(name,2,1) as str from test;

结果:



三、两个函数合用实现截取指定符号之间的字符。

前期工作:创建一个只有name列的表test,并插入如下数据:

  1. insert into test values('CA-CA1344-A-11OCT141250-D');  
  2. insert into test values('JD-JD693-A-11OCT141105-D'); 

目的:截取第一个 '-' 与第二个 '-' 之间的内容。

分析:

1.substr函数可以截取字符,但是需要开始截取位置,以及截取的字符内容长度;

select substr (name,开始截取位置,截取字符长度) from test;

2.开始截取位置等于:

第一个 '-' 的位置 + 1。(如果不加1的话,说明是从'-'位置就开始截取了,那么结果中将带这'-'这个符号)

同等于: instr(name,'-',1,1)+1  (1,1)表示从第一个位置开始匹配,知道找到第一个'-',根据最上面提供的函数公式,这两个参数可省。

3.截取的字符长度等于:

第二个 '-' 和第一个 '-' 的位置 ,二者相减再多减1就是两个'-'之间字符的长度。

同等于: instr(name,'-',1,2) - instr(name,'-',1,1) - 1

最终Sql:

select substr(name ,   instr(name,'-') + 1  ,   instr(name,'-',1,2) - instr(name,'-') - 1   ) as str from test;

规律:如果是截取第二个 - 和 第四个 - 之间的字符,那么,只需要更改instr函数中的参数内容即可,+1或者是-1是固定的。不信,可以试一下的。

如果提醒substr是无效的函数,那么需要给substr大写,并且添上拼音状态下的双引号。





原创粉丝点击