Oracle 生成指定范围内随机日期

╰+哭是因爲堅強的太久メ 2021-12-20 04:05 545阅读 0赞

Oracle**生成一个指定范围内的随机日期**

/*

* Oracle将日期作为过去某个关键日期(这个日期是公元前4712年1月1日)的整数偏移量来保存(即把日期保存为一个数字);

* 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数来生成一个指定范围内的随机日期。

*/

步骤:

  1. 先找到‘指定日期’与‘关键日期’相对应的整数偏移量,格式为’J’:

SQL>select to_char(sysdate,’J’) from dual; —系统给的结果是: 2456191

  1. 生成指定范围[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

  1. 生成指定范围[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 );

发表评论

表情:
评论列表 (有 0 条评论,545人围观)

还没有评论,来说两句吧...

相关阅读