1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | --울적한 금요일 야근하다가 심심해서.. 뭔가 획기적인 방법이 있을 것 같은데.. --무대뽀.. 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- 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 |