2017-03-08 46 views
0

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

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

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

+0

没有来自https://www.google.cn/search?q=pl%2Fsql+random+date的建议? –

回答

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年),这种方法不会溢出。

+0

我明白这个想法,但我想将这个随机日期保存为一个变量。例如,DECLARE date_random DATE。我没有成功,为了让它变成一个变量。 – zowie

+1

这不是T-SQL吗?这个问题被标记为Oracle的PL/SQL。 –

2

试试这个:

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进来非常方便!

+0

伟大的解决方案!当然,如果你想让1月1日成为可能,你的低价值将需要为0而不是1。但是,这取决于你的确切要求。 –

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;