一、DBMS_RANDOM函数
DBMS_RANDOM包提供了一些功能来生成随机数字、日期等类型的值。该包可通过以下语法进行调用:
SELECT dbms_random.value(minval, maxval) FROM dual;
其中minval
表示最小值(默认为0),maxval
表示最大值(默认为1)。这将返回在指定范围内的随机数字。
具体实现如下:
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 ;
SELECT ROUND(DBMS_RANDOM.VALUE(50, 100)) FROM dual;
4、指定长度的随机数字串
SELECT LPAD(DBMS_RANDOM.VALUE(1, 1000), 10, '0') FROM dual;
这将返回一个介于1和1000之间的随机数字,使用LPAD
函数将其填充到长度为10的字符串中。
5、正态分布的随机数
select dbms_random.normal from dual ;
6、随机字符串
select dbms_random.string('x', 3) 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 ;
二、RAND()函数
RAND()函数也可以用于生成随机数字。使用如下语法:
SELECT ROUND(DBMS_RANDOM.VALUE * (max - min + 1)) + min AS random_number FROM DUAL;
其中min
表示最小值,max
表示最大值。这将返回在指定范围内的四舍五入后的随机整数。
需要注意的是,由于Oracle会对查询结果集进行缓存,因此每次运行相同的查询时都会得到相同的随机结果。若想获取不同的随机结果,可以添加一个参数或者使用当前系统时间作为输入。