取一天内的时间段间的任意时间,用dbms_random.value实现。(例如:去早上5:00到8:00间的任意时间)
select trunc(sysdate) + dbms_random.value(300, 480) / 1440 from dual;
既然这里用到了dbms_random包,就讲讲这个package里的object。
SQL> desc dbms_random
PROCEDURE INITIALIZE
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
VAL BINARY_INTEGER IN
FUNCTION NORMAL RETURNS NUMBER
FUNCTION RANDOM RETURNS BINARY_INTEGER
PROCEDURE SEED
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
VAL BINARY_INTEGER IN
PROCEDURE SEED
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
VAL VARCHAR2 IN
FUNCTION STRING RETURNS VARCHAR2
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
OPT CHAR IN
LEN NUMBER IN
PROCEDURE TERMINATE
FUNCTION VALUE RETURNS NUMBER
FUNCTION VALUE RETURNS NUMBER
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
LOW NUMBER IN
HIGH NUMBER IN
SQL> spool off
其中INITIALIZE,random,terminate在11g中已废弃。
用的最多的就是value函数。
随机取某个表的n行数据:select * from (select * from table_name order by dbms_random.value) where rownum <= n;