トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

3-19 同じ文字が二文字以上存在するかチェック

SQLパズル

テーブル
Val
----
aaaa
abc
arg
ddff
efge

同じ文字が二文字以上存在するかチェックする

出力結果
Val   重複有無
----  --------
aaaa  重複あり
abc   重複なし
arg   重複なし
ddff  重複あり
efge  重複あり


SQL

with WorkView as (select 'aaaa' as Val from dual
union select 'abc'  from dual
union select 'ddff' from dual
union select 'arg'  from dual
union select 'efge' from dual),
CounterView as(
select RowNum as Counter
  from all_catalog
 where RowNum <= (select max(Length(Val)) from WorkView))
select Val,
case when exists(select 1 from CounterView b
                  where instr(a.Val,substr(a.Val,b.Counter,1),1,2) > 0)
     then '重複あり' else '重複なし' end as 重複有無
from WorkView a;


解説

instr関数の第四引数に2を指定して、
同じ文字が二文字以上存在するかチェックしてます