當然可以啦。但是你的第二個參數(shù)好像有問題,應該是從1開始,沒有從0開始的。
在城關(guān)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設 網(wǎng)站設計制作定制網(wǎng)站制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站制作,營銷型網(wǎng)站,外貿(mào)網(wǎng)站制作,城關(guān)網(wǎng)站建設費用合理。
如果字段存的就是這個,那么這個應該是字符串吧,那么就分幾步操作。
(1)定位,定位{和:的位置,從現(xiàn)在來看有兩種可能,第一種
這是兩個字段,分別是{12345:67:8}和{ABC:0:9},那就簡單了{肯定是1,所以這個也就不需要定位了,只需要定位第一個冒號的位置。
定位的函數(shù)應該是instr
第二種:{12345:67:8}{ABC:0:9}是一個字段的內(nèi)容,那就麻煩一些,不過也能做,希望不是這樣的,因為這個就要麻煩很多了。正則倒是能做,不過正則都要測試,我可沒有相應的環(huán)境做測試。這里也就不寫了,如果是這種,那么自己翻一翻正則函數(shù)的用法,應該能寫出來。
(2)截取,如果是第一種,那么定位了第一個冒號位置以后,用這個位置-2,也就是
instr(字段,':',1)-2這就是截取的長度,
從第二位開始截取,截取這個長度就可以substr(字段,2,instr(字段,':',1)-2)
這樣的話,{12345:67:8}換算到內(nèi)部就是substr({12345:67:8},2,5(7-2)),【7-2說明5的來源,第一個冒號在第7位】,截取出來就是12345
還是那句話,如果是第二種可能,那么就要找每一個{的位置,然后找在{后面距離最近的冒號的位置,然后再一個個的截取操作,正則應該可以操作,不過我還是那句話,需要測試,意思和這個截取函數(shù)差不多,自己好好理解一下應該就能操作了。
SELECT?substr('helloword', -1, 5)?from dual 從右邊開始截取5位。
Oracle 截取字符串
SUBSTR:取子字符串,從“起始位置”開始,取“多少"個,當起始位置為負數(shù)的時候,從右邊開始查找。
SUBSTR(源字符串,起始位置,要取多少位)
例:Select SUBSTR('ORC+001',1,3) From dual; 返回的是“ORC”
Select SUBSTR('ORC+001',-5,3) From dual; 返回的是“ORC”
INSTR:默認查找順序為從左到右。當起始位置為負數(shù)的時候,從右邊開始查找。INSTR(源字符串, 目標字符串, 起始位置, 匹配序號)
例:Select INSTR('ORC+001','+',1,1) From dual ;
返回的是"4",如果該字符串沒有匹配字符返回的是“0”。
采用數(shù)組形式可以達到這效果
DECLARE
TYPE T_VARRAY IS VARRAY(30) OF VARCHAR2(20);
V_VAR T_VARRAY := T_VARRAY('I', 'LOVE', 'STUDY');
BEGIN
DBMS_OUTPUT.PUT_LINE(V_VAR.COUNT);
FOR I IN 1 .. V_VAR.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(V_VAR(I));
END LOOP;
END;
Oracle提前某數(shù)據(jù)的前幾位用substr函數(shù)。
如test表中數(shù)據(jù)如下:
現(xiàn)要提取dept字段中的前兩位,可用如下語句:
1
select id,name,substr(dept,1,2) from test;
結(jié)果:
substr函數(shù)介紹:
語法:
substr(string,start,length)
參數(shù):
string - 指定的要截取的字符串
start - 必需,規(guī)定在字符串的何處開始
正數(shù) - 在字符串的指定位置開始
負數(shù) - 在從字符串結(jié)尾的指定位置開始
0 - 在字符串中的第一個字符處開始
length - 可選,指定要截取的字符串長度,缺省時返回字符表達式的值結(jié)束前的全部字符。