oracle随机生成时间

Posted 不自然地坚持

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle随机生成时间相关的知识,希望对你有一定的参考价值。

Julian Date定义

Julian Date:有效的日期范围是从公元前4713年1月1日到公元9999年12月31日。儒略日(julian date)是自公元前4713年1月1日中午12时起经过的天数。

使用它Julian Date使我们计算两个日期之间有多少天比较方便。

使用to_char(date,‘J‘),将普通日期转换为Julian Date

SELECT TO_CHAR(SYSDATE,‘J‘) FROM dual;

使用to_date(str,‘J‘),将天数转换为日期

SELECT TO_DATE(‘2458117‘,‘J‘) FROM dual;
SELECT TO_DATE(to_char(sysdate,‘J‘),‘J‘) FROM dual;

计算两个日期差了多少天

-- 计算2017-12-29和‘2017-12-01差了多少天
SELECT to_char(to_date(‘2017-12-29‘,‘yyyy-mm-dd‘),‘J‘)-to_char(to_date(‘2017-12-01‘,‘yyyy-mm-dd‘),‘J‘) from dual 

随机生成时间

-- 生成2000-01-01到现在的随机日期,时分秒为00:00:00
SELECT TO_DATE (TRUNC (DBMS_RANDOM.VALUE (TO_NUMBER (TO_CHAR (to_date(‘2000-01-01‘,‘yyyy-mm-dd‘),
                                                              ‘J‘
                                                             )
                                                    ),
                                          TO_NUMBER (TO_CHAR (SYSDATE, ‘J‘))
                                         )
                      ),
                ‘J‘
               )
  FROM DUAL;  

另外一种方法

-- 生成2000-01-01到现在的随机日期,包括时分秒也是随机的
SELECT to_date(‘2000-01-01‘, ‘yyyy-mm-dd‘) +
       DBMS_RANDOM.VALUE(1, (to_char(sysdate, ‘J‘) - to_char(to_date(‘2000-01-01‘, ‘yyyy-mm-dd‘), ‘J‘)) * 24 * 60 * 60)
       / 3600 / 24
FROM dual;
-- 或者
SELECT to_date(TRUNC(DBMS_RANDOM.VALUE(
       to_number(to_char(to_date(‘2000-01-01‘,‘yyyy-mm-dd‘),‘J‘)),
       to_number(to_char(sysdate,‘J‘)))),‘J‘)+
       DBMS_RANDOM.VALUE(1,3600)/3600
FROM dual;

以上是关于oracle随机生成时间的主要内容,如果未能解决你的问题,请参考以下文章

oracle随机uuid字符串生成函数

oracle随机生成时间

在Oracle中根据等级生成随机数据

Oracle dbms_random随机函数包

oracle 随机生成12位不重复数据,求高手写个存储过程。高分!!!

oracle 随机函数