一个字符串由0,1组成,
0010101001010101010100111101010101010000011101
想知道最长的连续的1有多少个
比如0010101001010101010100111101010101010000011101
最长的续的1是:1111
0010101001010101010100111101010101010000011101
想知道最长的连续的1有多少个
比如0010101001010101010100111101010101010000011101
最长的续的1是:1111
select 字符串, max(连续1) from (
select '0010101001010101010100111101010101010000011101' "字符串",
regexp_substr('0010101001010101010100111101010101010000011101', '1{'|| (level) ||'}') "连续1"
from dual
connect by level < length('0010101001010101010100111101010101010000011101')
) group by 字符串;字符串 MAX(连续1)
---------------------------------------------- ---------------------------
0010101001010101010100111101010101010000011101 1111
STR
--------------------------------------------------------------------------------
0010101001010101010100111101010101010000011101
SQL>
SQL> with t1 as (select rownum rn from dual connect by rownum<(select max(length(str))+2 from t_find)),
2 t2 as (select substr( str ,instr(str,'0',1,rn)+1,instr(str,'0',1,rn+1)-instr(str,'0',1,rn)-1) str from t_find,t1)
3 select max(str) from t2
4 ;
MAX(STR)
--------------------------------------------------------------------------------
1111
SQL>
SQL> with t1 as (select rownum rn from dual connect by rownum<(select max(length(str))+2 from t_find)),
2 t2 as (select substr( '0'||str||'0' ,instr('0'||str||'0','0',1,rn)+1,instr('0'||str||'0','0',1,rn+1)-instr('0'||str||'0','0',1,rn)-1) str from t_find,t1)
3 select max(str) from t2;
MAX(STR)
--------------------------------------------------------------------------------
1111
SQL>
select '001010100101101010101001111101010101010000011101' as id
from dual
union all
select '00101010010101010101001111010101010100000111011' from dual)
select id , max(length(l1.l)) ,max(l1.l)
from t
join (
select substr('11111111111111111111111111',1,level) l from dual connect by level < length('11111111111111111111111111')) l1
on t.id like '%'||l1.l || '%'
group by id
最容易理解滴.
select '001010100101101010101001111101010101010000011101' as id
from dual
union all
select '00101010010101010101001111010101010100000111011' from dual)
select id , max(length(l1.l)) ,max(l1.l)
from t
join (
select substr('11111111111111111111111111',1,level) l from dual connect by level < length('11111111111111111111111111')) l1
on t.id like '%'||l1.l || '%'
group by id
最容易理解滴.
这个是什么语法意思呢?