'20201101' ~ '20201231' 사이에 5일을 랜덤으로 생성(평일로만) 이런식으로 생성이 가능할까요?
WITH M_MONTHS
AS
(
SELECT ROWNUM AS RN
,CEIL(DBMS_RANDOM.VALUE(10, 12)) M_RAND
FROM DUAL
CONNECT BY LEVEL <= 10
),
M_DAYS
AS
(
SELECT ROWNUM AS RN
,CEIL(DBMS_RANDOM.VALUE(01, 31)) D_RAND
FROM DUAL
CONNECT BY LEVEL <= 10
)
SELECT DAYS
,TO_CHAR(TO_DATE(DAYS),'dy')
FROM(
SELECT M.*
,S.*
,TO_CHAR(SYSDATE,'YYYY') || M.M_RAND || LPAD(S.D_RAND,2,'0') AS DAYS
FROM M_MONTHS M
INNER JOIN M_DAYS S
ON 1=1
AND M.RN = S.RN
)
이런식으로 하면 10일이 되는데 주말을빼고생성한다고하면...그리고 더추가하면 휴일(빨간날)도 제외 뭐 추석연휴나 어린이날 같은날제외..
랜덤으로 숫자 생성하고 월도 랜덤하게 생성해서 하면 될꺼 같은데 혹시 다른방법도 있을까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM ( SELECT TO_CHAR(sdt + LEVEL - 1, 'yyyymmdd' ) dt FROM ( SELECT TO_DATE( '20201101' , 'yyyymmdd' ) sdt , TO_DATE( '20201231' , 'yyyymmdd' ) edt FROM dual ) WHERE TO_CHAR(sdt + LEVEL - 1, 'd' ) NOT IN ( '1' , '7' ) CONNECT BY LEVEL <= edt - sdt + 1 ORDER BY DBMS_RANDOM.VALUE ) WHERE ROWNUM <= 5 ORDER BY dt ; |