1. 程式人生 > >Oracle中的substr()函數的應用及解析

Oracle中的substr()函數的應用及解析

etc turn pan har pre -- () str arc

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()函數的應用及解析