2017-03-08 80 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;