/*
* 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/