oracle 截取數(shù)據(jù)的最后4位可以使用substr函數(shù),例如:
創(chuàng)新互聯(lián)建站堅(jiān)信:善待客戶,將會成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨嚒N覀儚牟缓鲇瞥踉L客戶,我們用心做好本職工作,不忘初心,方得始終。10多年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)建站是成都老牌網(wǎng)站營銷服務(wù)商,為您提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、H5頁面制作、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、微信平臺小程序開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。
select substr('HelloWorld',-4,4) value from dual;
返回結(jié)果:orld
從后面倒數(shù)第4位開始往后取4個(gè)字符。
擴(kuò)展資料
substr函數(shù)格式使用介紹 ? (俗稱:字符截取函數(shù)):
格式1: substr(string string, int a, int b);
1、string 需要截取的字符串
2、a 截取字符串的開始位置(注:當(dāng)a等于0或1時(shí),都是從第一位開始截?。?/p>
3、b 要截取的字符串的長度
格式2:substr(string string, int a) ;
1、string 需要截取的字符串
2、a 可以理解為從第a個(gè)字符開始截取后面所有的字符串。
如果字段存的就是這個(gè),那么這個(gè)應(yīng)該是字符串吧,那么就分幾步操作。
(1)定位,定位{和:的位置,從現(xiàn)在來看有兩種可能,第一種
這是兩個(gè)字段,分別是{12345:67:8}和{ABC:0:9},那就簡單了{(lán)肯定是1,所以這個(gè)也就不需要定位了,只需要定位第一個(gè)冒號的位置。
定位的函數(shù)應(yīng)該是instr
第二種:{12345:67:8}{ABC:0:9}是一個(gè)字段的內(nèi)容,那就麻煩一些,不過也能做,希望不是這樣的,因?yàn)檫@個(gè)就要麻煩很多了。正則倒是能做,不過正則都要測試,我可沒有相應(yīng)的環(huán)境做測試。這里也就不寫了,如果是這種,那么自己翻一翻正則函數(shù)的用法,應(yīng)該能寫出來。
(2)截取,如果是第一種,那么定位了第一個(gè)冒號位置以后,用這個(gè)位置-2,也就是
instr(字段,':',1)-2這就是截取的長度,
從第二位開始截取,截取這個(gè)長度就可以substr(字段,2,instr(字段,':',1)-2)
這樣的話,{12345:67:8}換算到內(nèi)部就是substr({12345:67:8},2,5(7-2)),【7-2說明5的來源,第一個(gè)冒號在第7位】,截取出來就是12345
還是那句話,如果是第二種可能,那么就要找每一個(gè){的位置,然后找在{后面距離最近的冒號的位置,然后再一個(gè)個(gè)的截取操作,正則應(yīng)該可以操作,不過我還是那句話,需要測試,意思和這個(gè)截取函數(shù)差不多,自己好好理解一下應(yīng)該就能操作了。
如果Oracle版本不是太低的話,使用 正則表達(dá)式函數(shù) REGEXP_SUBSTR 處理。\x0d\x0a\x0d\x0a5個(gè)參數(shù)\x0d\x0a第一個(gè)是輸入的字符串\x0d\x0a第二個(gè)是正則表達(dá)式\x0d\x0a第三個(gè)是標(biāo)識從第幾個(gè)字符開始正則表達(dá)式匹配。(默認(rèn)為1)\x0d\x0a第四個(gè)是標(biāo)識第幾個(gè)匹配組。(默認(rèn)為1)\x0d\x0a第五個(gè)是是取值范圍:\x0d\x0ai:大小寫不敏感;\x0d\x0ac:大小寫敏感;\x0d\x0an:點(diǎn)號 . 不匹配換行符號;\x0d\x0am:多行模式;\x0d\x0ax:擴(kuò)展模式,忽略正則表達(dá)式中的空白字符。\x0d\x0a\x0d\x0aSQL SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+');
SELECT substr('helloword',
-1,
5) from
dual
從右邊開始截取5位。
Oracle
截取字符串
1.
SUBSTR:取子字符串,從“起始位置”開始,取“多少"個(gè),當(dāng)起始位置為負(fù)數(shù)的時(shí)候,從右邊開始查找。
SUBSTR(源字符串,起始位置,要取多少位)
例:Select
SUBSTR('ORC+001',1,3)
From
dual;
返回的是“ORC”
Select
SUBSTR('ORC+001',-5,3)
From
dual;
返回的是“ORC”
2.
INSTR:默認(rèn)查找順序?yàn)閺淖蟮接?。?dāng)起始位置為負(fù)數(shù)的時(shí)候,從右邊開始查找。INSTR(源字符串,
目標(biāo)字符串,
起始位置,
匹配序號)
例:Select
INSTR('ORC+001','+',1,1)
From
dual
;
返回的是"4",如果該字符串沒有匹配字符返回的是“0”。
oracle中,截取某個(gè)字符串前的字符需要用instr函數(shù)和substr函數(shù)共同完成。
工具:oracle 10g
步驟:
1、以截取字符串“210-1106000001”中“-”前的部分為例。
2、執(zhí)行語句為:
select?substr('210-1106000001',1,instr('210-1106000001','-')-1)?from?dual;
3、結(jié)果為:
instr函數(shù)語法:instr( string1, string2, start_position,nth_appearance )
參數(shù)含義:
substr函數(shù)語法:substr(strings|express,m,[n])
參數(shù)含義:
strings|express :被截取的字符串或字符串表達(dá)式。
m 從第m個(gè)字符開始截取。
n 截取后字符串長度為n。
oracle中的date類型字段,截取年份可用to_char函數(shù)。
工具:oracle 10g
步驟:
1、如emp表中有hiredate字段為date類型的數(shù)據(jù)。
2、截取其中的年份部分,用如下語句:
select?empno,ename,job,mgr,to_char(hiredate,'yyyy'),sal,comm,deptno?from?emp;
3、運(yùn)行后結(jié)果,可以看出年份已將截取出來了: