SQL> SQL> ----方法一 SQL> select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual 2 ;RTRIM(LTRIM(REGEXP_SUBSTR('湖? ------------------------------ 张三SQL> SQL> ----方法二 SQL> select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual 2 ;REGEXP_REPLACE('湖南//张三//到 ------------------------------ 张三SQL> SQL> ------方法三 SQL> select s 2 from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s, 3 rownum rn 4 from dual 5 connect by rownum <= 3) 6 where rn = 2 7 ;S ------------------------------------------------ 张三SQL>
----方法一 select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual ----方法二 select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual ------方法三 select s from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s, rownum rn from dual connect by rownum <= 3) where rn = 2
在9i下好像用不了哦,regexp_replace无效标识符
------那就是使用instr和substr SQL> SQL> with tab as 2 ( 3 select '湖南//张三//到此一游' name from dual 4 ) 5 select ltrim(substr(name, 6 instr(name, '//', 1,1), 7 instr(name, '//',1, 2) - instr(name, '//', 1, 1)),'//') 8 from tab 9 ;LTRIM(SUBSTR(NAME,INSTR(NAME,' ------------------------------ 张三SQL>
--这是一个 多的话你就写个循环就可以了
SQL> SQL> select substr('湖南//张三//到此一游',instr('湖南//张三//到此一游','//',1)+2,instr('湖南//张三//到此一游','//',1,2)-instr('湖南//张三//到此一游','//',1,1)-2) 2 from dual 3 /
SQL>
SQL> ----方法一
SQL> select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual
2 ;RTRIM(LTRIM(REGEXP_SUBSTR('湖?
------------------------------
张三SQL>
SQL> ----方法二
SQL> select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual
2 ;REGEXP_REPLACE('湖南//张三//到
------------------------------
张三SQL>
SQL> ------方法三
SQL> select s
2 from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s,
3 rownum rn
4 from dual
5 connect by rownum <= 3)
6 where rn = 2
7 ;S
------------------------------------------------
张三SQL>
----方法一
select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual
----方法二
select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual
------方法三
select s
from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s,
rownum rn
from dual
connect by rownum <= 3)
where rn = 2
在9i下好像用不了哦,regexp_replace无效标识符
------那就是使用instr和substr
SQL>
SQL> with tab as
2 (
3 select '湖南//张三//到此一游' name from dual
4 )
5 select ltrim(substr(name,
6 instr(name, '//', 1,1),
7 instr(name, '//',1, 2) - instr(name, '//', 1, 1)),'//')
8 from tab
9 ;LTRIM(SUBSTR(NAME,INSTR(NAME,'
------------------------------
张三SQL>
--这是一个 多的话你就写个循环就可以了
SQL>
SQL> select substr('湖南//张三//到此一游',instr('湖南//张三//到此一游','//',1)+2,instr('湖南//张三//到此一游','//',1,2)-instr('湖南//张三//到此一游','//',1,1)-2)
2 from dual
3 /
SUBSTR('湖南//张三//到此一游',
------------------------------
张三
--给个差不多的例子
with tb as(
select '11;22;3323;abc;ddd' id from dual)
select
substr(';'||id||';',instr(';'||id||';',';',1,rownum)+1,
instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum)-1) newid,
instr(';'||id||';',';',1,rownum)col1, --';'rownum次出现的位置
instr(';'||id||';',';',1,rownum+1)col2, --';'rownum+1次出现的位置
instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum) col3 --要截取的长度
from tb
connect by rownum <= length(';'||id||';')
- length(replace(';'||id||';', ';', ''))-1
NEWID COL1 COL2 COL3
---------------------------------------- ---------- ---------- ----------
11 1 4 3
22 4 7 3
3323 7 12 5
abc 12 16 4
ddd 16 20 4