在開發項目的過程中遇到了這樣的一個問題,就是從遠程服務器取到的數據中是由一段規則的字符串組成的,但是你想要的還不是這段字符串,是其中的一段字符串,那就的使用Oracle強大的函數了,我的問題是這樣的,我要把如下所示紅框內的那段字符串截取出來,就是說截取第一個"-"和第二個“-”之間的字符串出來:
一:如圖所示:
二:新建數據表:
- CREATE TABLE test (name VARCHAR2 (32));
CREATE TABLE test (name VARCHAR2 (32));
三:給表中插入數據:
- insert into test values('CA-CA1344-A-11OCT141250-D');
- insert into test values('JD-JD693-A-11OCT141105-D');
insert into test values('CA-CA1344-A-11OCT141250-D');
insert into test values('JD-JD693-A-11OCT141105-D');
四:查詢結果:
方式一:
- select substr(name,instr(name,'-',1)+1,instr(name,'-',instr(name,'-',1)+1)-instr(name,'-',1)-1) from test;
select substr(name,instr(name,'-',1)+1,instr(name,'-',instr(name,'-',1)+1)-instr(name,'-',1)-1) from test;
方式二:
- select substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1)) from test;
select substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1)) from test;
五:結果如下:
六:接下我們再寫一下,取第二個"-"到第三個"-"之間的字符串的方法:
- select substr(name,instr(name,'-',2,2)+1,instr(name,'-',2,3)-1-instr(name,'-',2,2)) from test;
select substr(name,instr(name,'-',2,2)+1,instr(name,'-',2,3)-1-instr(name,'-',2,2)) from test;
七:結果如下: