혹시 랜덤하게 원하는 from - to 안에 날자를 원하는 일수만큼 자동으로 생성 할수 있나요? 0 1 981

by lgxj20 [2020.06.19 15:22:36]


'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일이 되는데 주말을빼고생성한다고하면...그리고 더추가하면 휴일(빨간날)도 제외 뭐 추석연휴나 어린이날 같은날제외..

 

랜덤으로 숫자 생성하고 월도 랜덤하게 생성해서 하면 될꺼 같은데 혹시 다른방법도 있을까요?

by 마농 [2020.06.22 09:03:53]
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입