--울적한 금요일 야근하다가 심심해서.. 뭔가 획기적인 방법이 있을 것 같은데.. --무대뽀.. 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