programing

DBMS_RANDOM으로 Oracle에서 임의 날짜 생성

lastmoon 2023. 7. 21. 21:50
반응형

DBMS_RANDOM으로 Oracle에서 임의 날짜 생성

익명의 블록이 있습니다.

DECLARE
   V_DATA   DATE;
BEGIN
   V_DATA := '01-GEN-2000';

   HR.STATISTICHE.RATINGOPERATORI (V_DATA);
   COMMIT;
END;

날짜를 임의로 생성하고 싶습니다.어떻게 해야 할까?

아래 쿼리에 표시된 대로 두 날짜 사이의 임의 날짜를 생성할 수 있습니다.랜덤 날짜는 2000년 1월 1일과 1999년 12월 31일 사이에 생성됩니다.

  SELECT TO_DATE(
              TRUNC(
                   DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J')
                                    ,TO_CHAR(DATE '9999-12-31','J')
                                    )
                    ),'J'
               ) FROM DUAL;

또는 사용할 수 있습니다.

SELECT TO_DATE (
              TRUNC (
                     DBMS_RANDOM.VALUE (2451545, 5373484) 
                    )
                , 'J'
              )
  FROM DUAL

위의 예에서 첫 번째 값은 01-Jan-2000이고 두 번째 값 ID는 31-dec-9999입니다.

사용할 수 있는 임의 날짜를 생성하는 방법

select to_date('2010-01-01', 'yyyy-mm-dd')+trunc(dbms_random.value(1,1000)) from dual

또는 임의의 날짜/시간에 대해

select to_date('2010-01-01', 'yyyy-mm-dd')+dbms_random.value(1,1000) from dual

논리를 보려면 이 코드를 사용할 수도 있습니다.

  create or replace procedure genDate(result out nvarchar2) IS
  year  number;
  month  number;
  day  number;
Begin
  year:=FLOOR(DBMS_RANDOM.value(2000,2100));
  month:=FLOOR(DBMS_RANDOM.value(1,12));
  IF month=2 and (year/4)=0 and (year/100)!=0 then
    day:=FLOOR(DBMS_RANDOM.value(1,29));
  ELSIF month=2 or (year/100)=0 then
    day:=FLOOR(DBMS_RANDOM.value(1,28));
  ELSIF MOD(month,2)=1 then
    day:=FLOOR(DBMS_RANDOM.value(1,31));
  ELSIF MOD(month,2)=0 and month!=2 then
    day:=FLOOR(DBMS_RANDOM.value(1,30));
  END IF;  
  result:=month||'-'||day||'-'||year;
End;

여기에 365일의 수량이 있는 지금부터 다시 날짜를 생성하는 옵션이 하나 더 있습니다. 'DD.MM.YYY'- 마스크

to_char(sysdate-dbms_random.value()*365, 'DD.MM.YYYY')

테스트를 위해 직원 데이터를 생성해야 했습니다.각 직원은 16세에서 65세 사이의 생년월일과 16세 생일과 SYSDATE 사이의 고용 날짜가 필요했습니다.어떻게...

FUNCTION randomDateInRange(alpha IN DATE, omega IN DATE) RETURN DATE IS
BEGIN
    RETURN alpha + DBMS_RANDOM.VALUE(0, omega - alpha);
END;

...그리고 나서, 이 기능을 사용하려면...

-- an employee can be any age from 16 to 65 years of age
DoB := randomDateInRange(
    SYSDATE - INTERVAL '65' YEAR,
    SYSDATE - INTERVAL '16' YEAR
);

-- an employee could have been hired any date since their sixteenth birthday
DoH := randomDateInRange(
    DoB + INTERVAL '16' YEAR,
    SYSDATE
);

언급URL : https://stackoverflow.com/questions/17449999/generate-a-random-date-in-oracle-with-dbms-random

반응형