oracle中的substr()函數(shù)用法實例詳解
1.substr函數(shù)格式 (俗稱:字符截取函數(shù))
格式1: substr(string string, int a, int b);
格式2:substr(string string, int a) ;
解析:
格式1:
1、string 需要截取的字符串
2、a 截取字符串的開始位置(注:當(dāng)a等于0或1時,都是從第一位開始截?。?br /> 3、b 要截取的字符串的長度
格式2:
1、string 需要截取的字符串
2、a 可以理解為從第a個字符開始截取后面所有的字符串。
2.實例解析
格式1:
select substr('HelloWorld',0,3) value from dual; //返回結(jié)果:Hel,截取從“H”開始3個字符
select substr('HelloWorld',1,3) value from dual; //返回結(jié)果:Hel,截取從“H”開始3個字符
select substr('HelloWorld',2,3) value from dual; //返回結(jié)果:ell,截取從“e”開始3個字符
select substr('HelloWorld',0,100) value from dual; //返回結(jié)果:HelloWorld,100雖然超出預(yù)處理的字符串最長度,但不會影響返回結(jié)果,系統(tǒng)按預(yù)處理字符串最大數(shù)量返回。
select substr('HelloWorld',5,3) value from dual; //返回結(jié)果:oWo
select substr('Hello World',5,3) value from dual; //返回結(jié)果:o W (中間的空格也算一個字符串,結(jié)果是:o空格W)
select substr('HelloWorld',-1,3) value from dual; //返回結(jié)果:d (從后面倒數(shù)第一位開始往后取1個字符,而不是3個。原因:下面紅色 第三個注解)
select substr('HelloWorld',-2,3) value from dual; //返回結(jié)果:ld (從后面倒數(shù)第二位開始往后取2個字符,而不是3個。原因:下面紅色 第三個注解)
select substr('HelloWorld',-3,3) value from dual; //返回結(jié)果:rld (從后面倒數(shù)第三位開始往后取3個字符)
select substr('HelloWorld',-4,3) value from dual; //返回結(jié)果:orl (從后面倒數(shù)第四位開始往后取3個字符)
(注:當(dāng)a等于0或1時,都是從第一位開始截取(如:1和2))
(注:假如HelloWorld之間有空格,那么空格也將算在里面(如:5和6))
(注:雖然7、8、9、10截取的都是3個字符,結(jié)果卻不是3 個字符; 只要 |a| ≤ b,取a的個數(shù)(如:7、8、9);當(dāng) |a| ≥ b時,才取b的個數(shù),由a決定截取位置(如:9和10))
格式2:
select substr('HelloWorld',0) value from dual; //返回結(jié)果:HelloWorld,截取所有字符
select substr('HelloWorld',1) value from dual; //返回結(jié)果:HelloWorld,截取所有字符
select substr('HelloWorld',2) value from dual; //返回結(jié)果:elloWorld,截取從“e”開始之后所有字符
select substr('HelloWorld',3) value from dual; //返回結(jié)果:lloWorld,截取從“l(fā)”開始之后所有字符
select substr('HelloWorld',-1) value from dual; //返回結(jié)果:d,從最后一個“d”開始 往回截取1個字符
select substr('HelloWorld',-2) value from dual; //返回結(jié)果:ld,從最后一個“d”開始 往回截取2個字符
select substr('HelloWorld',-3) value from dual; //返回結(jié)果:rld,從最后一個“d”開始 往回截取3個字符
(注:當(dāng)只有兩個參數(shù)時;不管是負(fù)幾,都是從最后一個開始 往回截取(如:15、16、17))
3、實例截圖:
例1:

例2:

例5:

例6:

例7:

例8:

4、完整函數(shù)實例
create or replace function get_request_code return varchar2 AS
-- 函數(shù)的作用:自動生成單號
v_mca_no mcode_apply.mca_no%TYPE; -- 新建一個形參v_mca_no,是以mcode_apply表中的mca_no字段的類型相同
CURSOR get_max_mca_no IS -- get_max_mca_no 游標(biāo)
SELECT max(substr(mca_no, 11, 3)) -- 查出的最大單號,截取出最后三位,如:001、002...00n
FROM mcode_apply
WHERE substr(mca_no, 3, 8) = to_char(sysdate, 'YYYYMMDD'); -- 截取單號【如:20170422】,to_char():把時間轉(zhuǎn)換為字符型,即string類型。
v_requestcode VARCHAR2(3); -- 形參(參數(shù))
BEGIN
OPEN get_max_mca_no;
FETCH get_max_mca_no INTO v_requestcode; -- 把游標(biāo)中查到的值,賦值給 v_requestcode 形參
CLOSE get_max_mca_no;
IF v_requestcode IS NULL THEN
v_requestcode := NVL(v_requestcode, 0); -- NVL()函數(shù):當(dāng)v_requestcode為NULL時,取0作為值
END IF;
v_requestcode:= lpad(v_requestcode+1,3,'0'); -- 將游標(biāo)中截取到的值加1,然后向左填充0,生成 001,002...00n 三位數(shù)的 序號; lpad()函數(shù):向左填充
v_mca_no:='MA'||to_char(sysdate,'YYYYMMDD')||v_requestcode; -- 最終生成的申請單號(如:MA20170422001;MA20170422002;...MA2017042200N )
RETURN '0~,'||v_mca_no;
END ;
注:如要測試該函數(shù),請復(fù)制到oracle數(shù)據(jù)庫中,右擊函數(shù)名 “get_request_code” 選擇test測試,測試時記得把相應(yīng)的表名及字段換成自己建立的
附:Oracle獲取字符串的最后幾位
substr(字符串,-10)
Oracle 字符串函數(shù) substr(字符串,截取開始位置,截取長度)
1. 如果最后一個截取長度參數(shù)為空,則表示從截取開始位置起截到最末
2. 如果截取開始位置 為大于0的數(shù)字,則表示從字符串左數(shù)幾位開始
3. 如果截取開始位置 為小于0的數(shù)字,則表示從字符串右數(shù)幾位開始
總結(jié)
到此這篇關(guān)于oracle中substr()函數(shù)用法詳解的文章就介紹到這了,更多相關(guān)oracle substr()函數(shù)詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- oracle截取字符(substr)檢索字符位置(instr)示例介紹
- Oracle通過正則表達式分割字符串 REGEXP_SUBSTR的代碼詳解
- oracle中l(wèi)ength、lengthb、substr、substrb函數(shù)用法介紹
- Oracle中instr和substr存儲過程詳解
- Oracle的substr和instr函數(shù)簡單用法
- Oracle中的INSTR,NVL和SUBSTR函數(shù)的用法詳解
- Oracle中instr函數(shù)與substr函數(shù)及自制分割函數(shù)詳解
- oracle數(shù)據(jù)庫截取字符串substr函數(shù)使用舉例
相關(guān)文章
Oracle創(chuàng)建用戶與表空間的絕對干貨(建議收藏)
在JAVAEE工程當(dāng)中時常用的Oracle數(shù)據(jù)庫,作為一名后臺程序開發(fā)人員,掌握如何在Oracle創(chuàng)建用戶,表空間是一項必備的技能,下面這篇文章主要給大家介紹了關(guān)于Oracle創(chuàng)建用戶與表空間的相關(guān)資料,需要的朋友可以參考下2022-09-09
Oracle RMAN還原時set newname文件名有空格報錯的解決方法
數(shù)據(jù)庫備份還原是我們?nèi)粘i_發(fā)少不了的一個功能,但如果一不注意估計就會有問題,下面這篇文章主要給大家介紹了關(guān)于Oracle RMAN還原時set newname文件名有空格報錯的解決方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Oracle23ai 新特性IF [NOT] EXISTS語法支持的使用
IF [NOT] EXISTS語法用于抑制因給定對象的存在或不存在而引發(fā)的潛在錯誤,允許您編寫冪等DDL腳本,本文主要介紹了Oracle23ai 新特性IF [NOT] EXISTS語法支持的使用,感興趣的可以了解一下2024-08-08
oracle中 procedure(存儲過程)和function(函數(shù))本質(zhì)區(qū)別
這篇文章主要介紹了 oracle中 procedure(存儲過程)和function(函數(shù))本質(zhì)區(qū)別,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02
ORACLE數(shù)據(jù)庫日常維護知識點總結(jié)
這篇文章主要介紹了ORACLE數(shù)據(jù)庫日常維護知識點總結(jié),對于維護oracle數(shù)據(jù)庫的朋友可以參考下2016-06-06

