oracle 11,用substr截取漢子,我發現這個截取沒有什么規律???有地址為北京市石景山區石景山路廣東省深圳市羅湖區XXX上海市浦東區xxxxxxxx把個省截取出來,select add2 from trade_base;select substr(add4,1,3),substr(add2,instr(add2,'省'),instr(add2,'市'))from trade_base;卻成了這個樣子?北京市開頭,截取0-3正常,廣東省深圳市3-6卻為“省深圳市羅湖”我郁悶了求指點?謝謝是把各個市提取出來。我暈看來我犯了一個錯。解決了select substr(add4,1,3) coding ,substr(add2,case when instr(add2,'省') > 0 then instr(add2,'省')+1 else 0 end,3) as areafrom trade_base;
2 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
不是沒規律
是上海和北京那個沒有省,還有instr選出來的是省那位的長度地址,得+1才是后一位
1 | select substr(add2,instr(add2, '省' )+1,instr(add2, '市' )) from trade_base |

郎朗坤
TA貢獻1921條經驗 獲得超9個贊
Oracle的substr函數是用于截取字符串的。
格式如下:
substr(字符串,截取開始位置,截取長度) //返回截取的字
幾種常見用法:
substr('Hello World',0,1) //返回結果為 'H' *從字符串第一個字符開始截取長度為1的字符串
substr('Hello World',1,1) //返回結果為 'H' *0和1都是表示截取的開始位置為第一個字符
substr('Hello World',2,4) //返回結果為 'ello'
substr('Hello World',-3,3)//返回結果為 'rld' *負數(-i)表示截取的開始位置為字符串右端向左數第i個字符
oracle代碼測試:
1 | select substr( 'Hello World' ,-3,3) value from dual; |
- 2 回答
- 0 關注
- 2612 瀏覽
添加回答
舉報
0/150
提交
取消