oracle中的substr()函數(shù)用法實(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時(shí),都是從第一位開始截?。?br /> 3、b 要截取的字符串的長度
格式2:
1、string 需要截取的字符串
2、a 可以理解為從第a個(gè)字符開始截取后面所有的字符串。
2.實(shí)例解析
格式1:
select substr('HelloWorld',0,3) value from dual; //返回結(jié)果:Hel,截取從“H”開始3個(gè)字符 select substr('HelloWorld',1,3) value from dual; //返回結(jié)果:Hel,截取從“H”開始3個(gè)字符 select substr('HelloWorld',2,3) value from dual; //返回結(jié)果:ell,截取從“e”開始3個(gè)字符 select substr('HelloWorld',0,100) value from dual; //返回結(jié)果:HelloWorld,100雖然超出預(yù)處理的字符串最長度,但不會(huì)影響返回結(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 (中間的空格也算一個(gè)字符串,結(jié)果是:o空格W) select substr('HelloWorld',-1,3) value from dual; //返回結(jié)果:d (從后面倒數(shù)第一位開始往后取1個(gè)字符,而不是3個(gè)。原因:下面紅色 第三個(gè)注解) select substr('HelloWorld',-2,3) value from dual; //返回結(jié)果:ld (從后面倒數(shù)第二位開始往后取2個(gè)字符,而不是3個(gè)。原因:下面紅色 第三個(gè)注解) select substr('HelloWorld',-3,3) value from dual; //返回結(jié)果:rld (從后面倒數(shù)第三位開始往后取3個(gè)字符) select substr('HelloWorld',-4,3) value from dual; //返回結(jié)果:orl (從后面倒數(shù)第四位開始往后取3個(gè)字符)
(注:當(dāng)a等于0或1時(shí),都是從第一位開始截取(如:1和2))
(注:假如HelloWorld之間有空格,那么空格也將算在里面(如:5和6))
(注:雖然7、8、9、10截取的都是3個(gè)字符,結(jié)果卻不是3 個(gè)字符; 只要 |a| ≤ b,取a的個(gè)數(shù)(如:7、8、9);當(dāng) |a| ≥ b時(shí),才取b的個(gè)數(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,從最后一個(gè)“d”開始 往回截取1個(gè)字符 select substr('HelloWorld',-2) value from dual; //返回結(jié)果:ld,從最后一個(gè)“d”開始 往回截取2個(gè)字符 select substr('HelloWorld',-3) value from dual; //返回結(jié)果:rld,從最后一個(gè)“d”開始 往回截取3個(gè)字符
(注:當(dāng)只有兩個(gè)參數(shù)時(shí);不管是負(fù)幾,都是從最后一個(gè)開始 往回截取(如:15、16、17))
3、實(shí)例截圖:
例1:
例2:
例5:
例6:
例7:
例8:
4、完整函數(shù)實(shí)例
create or replace function get_request_code return varchar2 AS -- 函數(shù)的作用:自動(dòng)生成單號(hào) v_mca_no mcode_apply.mca_no%TYPE; -- 新建一個(gè)形參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)) -- 查出的最大單號(hào),截取出最后三位,如:001、002...00n FROM mcode_apply WHERE substr(mca_no, 3, 8) = to_char(sysdate, 'YYYYMMDD'); -- 截取單號(hào)【如:20170422】,to_char():把時(shí)間轉(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時(shí),取0作為值 END IF; v_requestcode:= lpad(v_requestcode+1,3,'0'); -- 將游標(biāo)中截取到的值加1,然后向左填充0,生成 001,002...00n 三位數(shù)的 序號(hào); lpad()函數(shù):向左填充 v_mca_no:='MA'||to_char(sysdate,'YYYYMMDD')||v_requestcode; -- 最終生成的申請(qǐng)單號(hào)(如:MA20170422001;MA20170422002;...MA2017042200N ) RETURN '0~,'||v_mca_no; END ;
注:如要測試該函數(shù),請(qǐng)復(fù)制到oracle數(shù)據(jù)庫中,右擊函數(shù)名 “get_request_code” 選擇test測試,測試時(shí)記得把相應(yīng)的表名及字段換成自己建立的
附:Oracle獲取字符串的最后幾位
substr(字符串,-10)
Oracle 字符串函數(shù) substr(字符串,截取開始位置,截取長度)
1. 如果最后一個(gè)截取長度參數(shù)為空,則表示從截取開始位置起截到最末
2. 如果截取開始位置 為大于0的數(shù)字,則表示從字符串左數(shù)幾位開始
3. 如果截取開始位置 為小于0的數(shù)字,則表示從字符串右數(shù)幾位開始
總結(jié)
到此這篇關(guān)于oracle中substr()函數(shù)用法詳解的文章就介紹到這了,更多相關(guān)oracle substr()函數(shù)詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- oracle截取字符(substr)檢索字符位置(instr)示例介紹
- Oracle通過正則表達(dá)式分割字符串 REGEXP_SUBSTR的代碼詳解
- oracle中l(wèi)ength、lengthb、substr、substrb函數(shù)用法介紹
- Oracle中instr和substr存儲(chǔ)過程詳解
- Oracle的substr和instr函數(shù)簡單用法
- Oracle中的INSTR,NVL和SUBSTR函數(shù)的用法詳解
- Oracle中instr函數(shù)與substr函數(shù)及自制分割函數(shù)詳解
- oracle數(shù)據(jù)庫截取字符串substr函數(shù)使用舉例
相關(guān)文章
ORALCE?substr函數(shù)及substrb與字符集關(guān)系詳解
這篇文章主要介紹了ORALCE?substr函數(shù)及substrb與字符集關(guān)系,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Oracle 11g數(shù)據(jù)庫使用expdp每周進(jìn)行數(shù)據(jù)備份并上傳到備份服務(wù)器
這篇文章主要介紹了Oracle 11g數(shù)據(jù)庫使用expdp每周進(jìn)行數(shù)據(jù)備份并上傳到備份服務(wù)器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06講解Oracle數(shù)據(jù)庫中的數(shù)據(jù)字典及相關(guān)SQL查詢用法
這篇文章主要介紹了Oracle數(shù)據(jù)庫中的數(shù)據(jù)字典及相關(guān)SQL查詢用法,是Oracle入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-03-03oracle關(guān)聯(lián)查詢報(bào)invalid number錯(cuò)誤的解決方法
這篇文章主要介紹了oracle關(guān)聯(lián)查詢報(bào)invalid number錯(cuò)誤的解決方法,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-09-09Oracle數(shù)據(jù)更改后出錯(cuò)的解決方法
這篇文章主要介紹了Oracle數(shù)據(jù)更改后出錯(cuò)的解決方法,需要的朋友可以參考下2014-07-07Oracle 左連接(+)加號(hào)用法及常用語法之間的關(guān)系
通過分析左連接(+)加號(hào)的寫法和一些常用語法之間的聯(lián)系,了解到Oracle 加號(hào)(+)的用法。本文重點(diǎn)給大家介紹Oracle 左連接(+)加號(hào)用法及常用語法之間的關(guān)系 ,感興趣的朋友跟隨小編一起看看吧2018-10-10Oracle轉(zhuǎn)換MySql之遞歸start with詳解
Oracle中的`startwith`函數(shù)在MySQL中需要轉(zhuǎn)換為使用`LIKE`操作符,并且可能需要自定義函數(shù)來實(shí)現(xiàn)類似的功能2024-12-12