字串本身重複字元的檢查辦法

regonly1發表於2015-12-15
我們知道,要拼接一個字元不重複的字串比較方便,只要用類似下面的辦法即可:
數字不重複(9位)拼接辦法:
select replace(sys_connect_by_path(l, ','), ',')
  from (select level l from dual connect by rownum <= 9)
 where level = 9
connect by nocycle prior l <> l

但要反過來說,要校驗字串中是否存在重複的字元(不管連續的還是不連續的),好像還沒有一個好的辦法來實現。
今天一個同事來問我這個問題,我想起來原來也考慮過這個問題,但一直沒有解決。這次考慮了下,搞了一個解決方案出來(辦法不是很巧妙,因為在原理上,還是用distinct這個辦法來實現的)。
先貼出來,待以後看下是否有更好的解決辦法:
create table tmp_strlen9 as 
select dbms_random.string('l',9) str from dual connect by rownum <= 100000;

select *
  from tmp_strlen9 a,
       table(cast(multiset (select count(distinct substr(str, rownum, 1))
                     from dual
                   connect by rownum <= length(str)) as
                  sys.odcinumberlist)) b
 where b.column_value <> 9

查了下,效率也還可以。10w資料篩選1.7s count出來。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-1872429/,如需轉載,請註明出處,否則將追究法律責任。

相關文章