substr函數格式 (俗稱:字元截取函數)
格式1:substr(字元串, 開始截取的下标, 要截取的字元串長度);
格式2:substr(字元串, 開始截取的下标) ;
下标從1開始
執行個體:
select substr('123456',2,3) value from dual; //234
select substr('我愛中國',2,3) value from dual; //愛中國
表示從第二位開始截取3個字元串。
select substr('123456',2) value from dual; //23456
select substr('我愛中國啊',2) value from dual; //愛中國啊
表示從第二位開始截取到最後一個字元串。
instr函數的格式 (俗稱:字元查找函數)
格式一:instr(源字元串, 目标字元串)
格式二:instr(源字元串, 目标字元串, 起始檢索位置, 檢索目标字元串第幾次出現的位置)
- 下标從1開始
- 在Oracle/PLSQL中,instr函數傳回要截取的字元串在源字元串中的位置。隻檢索一次,也就是說從字元的開始到字元的結尾就結束。
- 如果檢索不到目标字元串,傳回0
執行個體:
select instr('helloworld','l') from dual; --傳回結果:3 預設第一次出現“l”的位置
select instr('helloworld','l',1,3) from dual; --傳回結果:9 第3次出現“l”的位置
substr和instr的綜合應用執行個體:
現有表資料如下:
目标是擷取到紅色圈起來的這個字元串(公司簡稱) 。
先對字元串做一個分析,目标字元串位于第3個/(斜杠)和第四個/(斜杠)中間位置。那就截取第三個/(斜杠)和第四個/(斜杠)中間的内容即可。
1.利用instr函數擷取第三個斜杠和第四個斜杠的下标。
select instr(PPHOTOPATH,'/',1,3) from as_land_photo; --第三次/出現的下标
select instr(PPHOTOPATH,'/',1,4) from as_land_photo; --第四次/出現的下标
2.用第四個斜杠的下标減去第三個斜杠的下标即可得出目标字元串的長度。
select instr(PPHOTOPATH,'/',1,4)-instr(PPHOTOPATH,'/',1,3)-1 from as_land_photo; --公司名稱長度
3.利用substr函數擷取到目标字元串
select substr(PPHOTOPATH,instr(PPHOTOPATH,'/',1,3)+1,instr(PPHOTOPATH,'/',1,4)-instr(PPHOTOPATH,'/',1,3)-1) from as_land_photo;
最終結果如下: