--울적한 금요일 야근하다가 심심해서.. 뭔가 획기적인 방법이 있을 것 같은데.. --무대뽀.. 0~5로 이루어진 서로 다른 3자리조합 만들고 3의 배수 필터 with t as ( select to_char(rownum - 1) no from dual connect by level <= 6 ) select a.no||b.no||c.no c_str from t a,t b, t c where a.no != b.no and a.no != c.no and b.no != c.no and mod(to_number(a.no||b.no||c.no),3) = 0 order by 1 --0~5로 만들수 있는 숫자에서 6~9가 들어간 숫자 필터 후 --동일 숫자가 반복되는 숫자 필터 후 --3의 배수 필터 with t as ( select lpad(rownum,3,'0') no from dual connect by level <= 543 ) select * from t where not regexp_like(no,'6|7|8|9') and not regexp_like(no,'(.).*(\1)') and mod(no,3) = 0 order by 1
-- jkson이 다해버려서.. 딴 방식으로 -- 003은 배수인지 불분명 WITH T AS ( SELECT LEVEL - 1 NUM FROM DUAL CONNECT BY LEVEL <= 6 ), T2 AS ( SELECT A.NUM || B.NUM || C.NUM AS NUM FROM T A , T B , T C ) SELECT A.NUM FROM T2 A , (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 3 ) B WHERE MOD(TO_NUMBER(A.NUM),3) = 0 GROUP BY NUM HAVING COUNT(DISTINCT SUBSTR(A.NUM , LV , 1 ) ) = 3