Oracle中如何產生指定範圍內隨機日期

來源:互聯網
上載者:User

/*

* Oracle將日期作為過去某個關鍵日期(這個日期是公元前4712年1月1日)的整數位移量來儲存(即把日期儲存為一個數字);

* 因此可通過尋找‘指定日期’與‘關鍵日期’相對應的整數位移量,再加一個指定範圍內的隨機整數來產生一個指定範圍內的隨機日期。

*/

步驟:

1. 先找到‘指定日期’與‘關鍵日期’相對應的整數位移量,格式為'J':

SQL>select to_char(sysdate,'J') from dual; --系統給的結果是: 2456191

2. 產生指定範圍[min_value, max_value]內的隨機日期:

SQL>select to_date(2456191 + trunc(DBMS_RANDOM.VALUE(min_value, max_value)),'J') from dual;

例如,要產生一個2003年內的任意日期:

/*

* 分析:2003年內的任意日期,即日期範圍是(2003-01-01, 2003-12-31)

* 可以轉化為 2003-01-01 + (0, 365),

* 其中,2003-01-01 就是‘指定日期’; (0, 365) 就是‘指定範圍’

*/

1. 首先確定2003年1月1日的日期整數:

SQL>select to_char(to_date('2003-01-01', 'yyyy-MM-dd'), 'J') from dual; --系統給的結果是: 2452641

2. 產生指定範圍[min_value, max_value]內的隨機日期:

SQL>select to_date(2452641 + trunc(DBMS_RANDOM.VALUE(0, 365)), 'J') from dual;

--dbms_random.seed

設定 seed 來確定隨機數的起始點,對於相同的 seed 而言,隨機數的任意一次變化都將是確定的.

設定種子的目的是重現隨機數,用於調試.

就是說,若某一時刻調用 seed 之後,依次產生的隨機數是4,6,1,...

那麼當再次調用相同的 seed 之後,依次產生的隨機數仍是4,6,1,...

seed 參數有兩種,一種是數值型,一種是字元型(最大長度2000)

PROCEDURE seed(val IN BINARY_INTEGER );

PROCEDURE seed(val IN VARCHAR2 );

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.