14

私はこの匿名ブロックを持っています:

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

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

しかし、ランダムな方法で日付を生成したいと思います。どのようにできるのか?

4

4 に答える 4

31

以下のクエリに表示されているように、2 つの日付の間でランダムな日付を生成できます。ランダムな日付は、2000 年 1 月 1 日から 9999 年 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 で、2 番目の値は id 31-dec-9999 です。

于 2013-07-03T14:14:05.983 に答える
6

使用できるランダムな日付を生成するには

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
于 2015-05-28T13:37:03.013 に答える
0

ロジックを確認したい場合は、このコードを使用することもできます。

  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;
于 2015-05-30T17:28:25.453 に答える