码迷,mamicode.com
首页 > 数据库 > 详细

Oracle中的substr()函数的应用及解析

时间:2017-11-08 20:13:14      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:序号   大数   image   分享   一个   --   ...   acl   9.png   

1)substr函数格式   (俗称:截取函数)

  格式1: substr(string string, int a, int b);

  格式2:substr(string string, int a) ;

解释:

格式1

1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度

格式2

1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。

 

2)实例解析

实例:

1、substr("HelloWorld",0,3);  //返回结果:Hel,截取从H开始3个字符
2、substr("HelloWorld",1,3);  //返回结果:Hel,截取从H开始3个字符
3、substr("HelloWorld",2,3);  //返回结果:ell,截取从e开始3个字符
4、substr("HelloWorld",0,100);  //返回结果:HelloWorld,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。
5、substr("HelloWorld",-1,3);  //返回结果:d
6、substr("HelloWorld",-2,3);  //返回结果:ld
7、substr("HelloWorld",-3,3);  //返回结果:rld
8、substr("HelloWorld",-4,3);  //返回结果:orl

注:当a等于0或1时,都是从第一位开始截取(如:1和2)
注:虽然5、6、7、8截取的都是3个字符,结果却不是3 个字符; 只要a<b,取a得个数(如:5、6、7),当a>b时,才取b的个数(如:7和8)

9、substr("HelloWorld",0);  //返回结果:HelloWorld,截取所有字符
10、substr("HelloWorld",1);  //返回结果:HelloWorld,截取所有字符
11、substr("HelloWorld",2);  //返回结果:elloWorld,截取从e开始之后所有字符
12、substr("HelloWorld",3);  //返回结果:lloWorld,截取从l开始之后所有字符
13、substr("HelloWorld",-1);  //返回结果:d,从最后一个d开始 往回截取1个字符
14、substr("HelloWorld",-2);  //返回结果:ld,从最后一个d开始 往回截取2个字符
15、substr("HelloWorld",-3);  //返回结果:rld,从最后一个d开始 往回截取3个字符


注:当只有两个参数时;不管是负几,都是从最后一个开始 往回截取(如:13、14、15)

 图解:

1、

技术分享

2、

技术分享

5、

技术分享

6、

技术分享

7、

技术分享

8、

技术分享

13、

技术分享

14、

技术分享

15、

技术分享

 

 3)完整函数实例

create or replace function get_request_code return varchar2 AS

       -- 函数的作用:自动生成单号
       v_mca_no   mcode_apply_01.mca_no%TYPE;

       CURSOR get_max_mca_no IS   
              SELECT max(substr(mca_no, 11, 1)) -- 查出的最大单号,截取出最后三位,如001、002...00n
              FROM  mcode_apply_01 
              WHERE  substr(mca_no, 3, 8) = to_char(sysdate, YYYYMMDD); -- 生成(从第三位开始)日期【如:20170422】

        v_requestcode VARCHAR2(3);

  BEGIN
       OPEN get_max_mca_no; 
       FETCH get_max_mca_no INTO v_requestcode; 
       CLOSE get_max_mca_no;

  IF v_requestcode IS NULL THEN         
       v_requestcode := NVL(v_requestcode, 0);  -- NVL()函数:当v_requestcode为NULL时,取0作为值
  END IF;

       v_requestcode := lpad(v_requestcode + 1, 3, 0);  -- 将游标中截取到的值加1,然后向左填充0,生成 001...00n 序号; lpad()函数:向左填充
       v_mca_no := MA || to_char(sysdate, YYYYMMDD) || v_requestcode;  -- 最终生成的申请单号(如:MA20170422001;MA20170422002;...MA2017042200N )
 
  RETURN 0~,|| v_mca_no; 

END ;

 

Oracle中的substr()函数的应用及解析

标签:序号   大数   image   分享   一个   --   ...   acl   9.png   

原文地址:http://www.cnblogs.com/dshore123/p/7805050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!