在特定年份生成随机日期

时间:2017-03-08 19:49:51

标签: oracle plsql

如何在PL / SQL中生成年份为“1900”的随机日期?

例如,我想在一个名为date_random的变量中生成包含1900年的日期。

我尝试过多种方式(DATEADD,DATEDIFF)但无法获得结果。请帮忙吗?

3 个答案:

答案 0 :(得分:3)

尝试一下:

DECLARE
   l_date   DATE;
BEGIN
   l_date := TRUNC (SYSDATE, 'YYYY') + 
             ROUND (DBMS_RANDOM.VALUE (1, 365));
   DBMS_OUTPUT.put_line (l_date);

   /* And for a specific year */
   l_date := TRUNC (DATE '1900-01-01', 'YYYY') + 
             ROUND (DBMS_RANDOM.VALUE (1, 365));
   DBMS_OUTPUT.put_line (l_date);
END;
/

DBMS_RANDOM非常方便!

答案 1 :(得分:0)

这样的事可能有用吗?

declare @FromDate date = '1900-01-01'
declare @ToDate date = '1900-12-31'

select dateadd(day, 
           rand(checksum(newid()))*(1+datediff(day, @FromDate, @ToDate)), 
           @FromDate)

或许更像是:

SELECT DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 365), '1900-01-01')
FROM your_table

这会生成从1900-01-01开始的日期,您可以更改模数值中的天数,我放365(1年),此方法不会溢出。

答案 2 :(得分:0)

也试一试。纯SQL调整。希望这会有所帮助。

SELECT TRUNC(to_date('01/01/'
  ||'&enter_year','mm/dd/yyyy'),'month')+ROUND(dbms_random.value(1,
  CASE
    WHEN mod('&enter_year',4) = 0
    THEN 366
    ELSE 365
  END)) days
FROM dual;