'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일이 되는데 주말을빼고생성한다고하면...그리고 더추가하면 휴일(빨간날)도 제외 뭐 추석연휴나 어린이날 같은날제외..
랜덤으로 숫자 생성하고 월도 랜덤하게 생성해서 하면 될꺼 같은데 혹시 다른방법도 있을까요?
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 ;