`

Oracle 取随机数

阅读更多

Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个:

DBMS_RANDOM.VALUE函数

该函数用来产生一个随机数,有两种用法:

1. 产生一个介于01之间(不包含01)的38位精度的随机数,语法为:

 

DBMS_RANDOM.VALUE RETURN NUMBER;

 

这种用法不包含参数。

2. 产生一个介于指定范围之内的38位精度的随机数,语法为:

 

DBMS_RANDOM.VALUE(low IN NUMBER,high IN NUMBER) RETURN NUMBER;

 

这种用法包含两参数,参数low用来指定要生成的随机数的下限,参数high指定上限,生成的随机。请注意生成的随机数有可能等于下限,但绝对小于上限,即“low<=随机数<high

 

举个例子: 要产生一个1到100之间的数可以这样写: DBMS_RANDOM.VALUE(1,100)

 

DBMS_RANDOM.STRING函数

该函数产生一个随机字符串,语法为:

 

DBMS_RANDOM.STRING (opt IN CHAR,len IN NUMBER) RETURN VARCHAR2;

 

参数len指定生成的字符串的长度。

参数opt指定生成的字符串的样式,允许的取值及其表示的含义如下表所示:

 

取值

含义

‘u’’U’

返回一个由大写字母组成的字符串

‘l’’L’

返回一个由小写字母组成的字符串

‘a’’A’

返回一个由大写字母和小写字母组成的字符串

‘x’’X’

返回一个由大写字母和数字组成的字符串

‘p’’P’

返回一个由任意的可打印字符组成的字符串

 

举个例子: 要产生一个长度为6且只包括大写字母的字符串,可以这样写: DBMS_RANDOM.STRING('U',6)

附转:“伪随机数”和“随机种子”

首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似 的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言, 其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子 一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子。

2、

1、从表中随机取记录

select * from (select * from staff order by dbms_random.random)
where rownum < 4

 

表示从STAFF表中随机取3条记录

 

2、产生随机数

 

SELECT DBMS_RANDOM.RANDOM FROM DUAL;
产生一个任意大小的随机数

 

SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL;
产生一个100以内的随机数

 

SELECT TRUNC(100+900*dbms_random.value) FROM dual;
产生一个100~1000之间的随机数

 

SELECT dbms_random.value FROM dual;
产生一个0~1之间的随机数

 

SELECT dbms_random.value(10,20) FROM dual;
产生一个10~20之间的随机数

 

SELECT dbms_random.normal FROM dual;
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。

 

3、产生随机字符串

 

select dbms_random.string('P',20) from dual;
第一个参数 P 表示 printable,即字符串由任意可打印字符构成
第二个参数表示返回字符串长度

 

4、ceil( n )函数是返回大于或等于n的最小整数。
DBMS_RANDOM.VALUE()是随机产生( 0,1 )之间的数。
要产生两位的随机数,可以DBMS_RANDOM.VALUE()*100,这样产生( 0,100 )
的随机数,当产生( 0,10)之间的数时,只要加上10就可以保证产生的数都是两位了。

 

ORACLE的PL/SQL提供了生成随机数和随机字符串的多种方式,罗列如下:

1、小数( 0 ~ 1)

select dbms_random.value from dual

2、指定范围内的小数 ( 0 ~ 100 )
select dbms_random.value(0,100) from dual


3、指定范围内的整数 ( 0 ~ 100 )

select trunc(dbms_random.value(0,100)) from dual

4、长度为20的随机数字串

select substr(cast(dbms_random.value as varchar2(38)),3,20) from dual

5、正态分布的随机数

select dbms_random.normal from dual

6、随机字符串

select dbms_random.string(opt, length) from dual

opt可取值如下:
'u','U' : 大写字母
'l','L' : 小写字母
'a','A' : 大、小写字母
'x','X' : 数字、大写字母
'p','P' : 可打印字符

7、随机日期

select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual

通过下面的语句获得指定日期的基数

select to_char(sysdate,'J') from dual

8、生成GUID

select sys_guid() from dual

--生成带分隔符(-)的GUID的自定义函数
create or replace function my_guid
return varchar2
is
guid varchar(36);
temp varchar(32);
begin
temp:=sys_guid();
guid:= substr(temp,1,8) || '-'
||substr(temp,9,4) || '-'
||substr(temp,13,4)|| '-'
||substr(temp,17,4)|| '-'
||substr(temp,21,12);
return guid;
end;

分享到:
评论

相关推荐

    Oracle里抽取随机数的多种方法

    本文以实例的方式来讲解如何抽取随机数的多种方法。

    oracle取随机数

    oracle产生随机字符型,数值型或生成GUID

    Oracle里取随机数的几种具体的方法

    本文介绍了Oracle里取随机数的几种具体的方法。

    oracle中随机数的获取

    oracle中随机数的获取 通过sql获取各种类型的随机数

    Oracle 随机数

    利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户: select * from ( select * from busi.t_ar_userinfo order by dbms_random.value) where rownum &lt; 500; 有关dbms_random的参考文献,链接...

    SQLServer和Oracle的常用函数对比

    SQLServer和Oracle的常用函数对比 ...12.取随机数 13.取符号 14.圆周率 15.sin,cos,tan 参数都以弧度为单位 16.Asin,Acos,Atan,Atan2 返回弧度 17.弧度角度互换 18. 求集合最大值 。。。。。。。

    取不重复的N个随机数

    随机函数的用法,数组的用法,GOTO语句的用法

    oracle统计时间段内每一天的数据(推荐)

    下面给大家介绍oracle统计时间段内每一天的数据,具体sql语句如下所示: 1. 生成1000个随机数 SELECT ROWNUM RN, DBMS_RANDOM.VALUE(0, 1000) RANDOM FROM DUAL CONNECT BY ROWNUM &lt;= 1000; 注:DBMS_RANDOM....

    程序员的SQL金典6-8

     5.1.4 求随机数  5.1.5 舍入到最大整数  5.1.6 舍入到最小整数  5.1.7 四舍五入  5.1.8 求正弦值  5.1.9 求余弦值  5.1.10 求反正弦值  5.1.11 求反余弦值  5.1.12 求正切值  5.1.13 求反正切值  5.1.14...

    程序员的SQL金典7-8

     5.1.4 求随机数  5.1.5 舍入到最大整数  5.1.6 舍入到最小整数  5.1.7 四舍五入  5.1.8 求正弦值  5.1.9 求余弦值  5.1.10 求反正弦值  5.1.11 求反余弦值  5.1.12 求正切值  5.1.13 求反正切值  5.1.14...

    程序员的SQL金典3-8

     5.1.4 求随机数  5.1.5 舍入到最大整数  5.1.6 舍入到最小整数  5.1.7 四舍五入  5.1.8 求正弦值  5.1.9 求余弦值  5.1.10 求反正弦值  5.1.11 求反余弦值  5.1.12 求正切值  5.1.13 求反正切值  5.1.14...

    程序员的SQL金典4-8

     5.1.4 求随机数  5.1.5 舍入到最大整数  5.1.6 舍入到最小整数  5.1.7 四舍五入  5.1.8 求正弦值  5.1.9 求余弦值  5.1.10 求反正弦值  5.1.11 求反余弦值  5.1.12 求正切值  5.1.13 求反正切值  5.1.14...

    程序员的SQL金典.rar

     5.1.4 求随机数  5.1.5 舍入到最大整数  5.1.6 舍入到最小整数  5.1.7 四舍五入  5.1.8 求正弦值  5.1.9 求余弦值  5.1.10 求反正弦值  5.1.11 求反余弦值  5.1.12 求正切值  5.1.13 求反正切值  5.1.14...

    C#基类库(苏飞版)

    1.数据访问基础类(基于Oracle),主要是用来访问Oracle数据库的。 2.得到最大值;是否存在;是否存在(基于OracleParameter ); 3.执行SQL语句,返回影响的记录数; 4.执行多条SQL语句,实现数据库事务; 5.执行带一个...

    C#编程经验技巧宝典

    54 &lt;br&gt;0075 用回溯法找出n个自然数中取r个数的全排列 55 &lt;br&gt;0076 约瑟夫环问题 56 &lt;br&gt;0077 猴子选大王 57 &lt;br&gt;0078 如何判断IP是否正确 57 &lt;br&gt;0079 如何将小写金额转换为大写金额 57...

Global site tag (gtag.js) - Google Analytics