Oracle 随机字符串、数值、日期 DBMS_RANDOM

随机生成字符串、数值、日期

1、小数( 0 ~ 1)

select dbms_random.value from dual;

效果

1个数 .276492126099133786011704326555313488452个数 .517802596657979210246917447582635882473个数 .32815776561660219455502282716814904384个数 .287836371154016887310387318053591725995个数 .648592767490945278381058503930952620836个数 .152593973059351185465876144316510293857个数 .633920832414182913672340946935666460258个数 .610890854678008094276481376452014008979个数 .76155422809958222535466816251754489458

2、小数 ( 0 ~ 100 )

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

效果

1个数 45.8298800944870551322642125359993209782个数 69.2403374846802752927472469679478731223个数 72.8716989069708184684428124299799956674个数 78.9354316555779967022945227188626043615个数 99.5610699427858812890398615619283385586个数 35.6358024410995675630036645667225009947个数 93.7777717664795362268569988539730170618个数 51.1254798750788247687660950606215352329个数 92.303839460882387697547049237471897234

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

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

效果

1个数 162个数 153个数 224个数 745个数 346个数 697个数 298个数 679个数 3

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

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

效果

1个数 313533145756534580962个数 638653916275388486723个数 760435518304167905524个数 549913418564964289475个数 986940729231064879546个数 196096267723389165287个数 961142842945115641098个数 378522421917418087959个数 04832197672579950847

5、正态分布的随机数

select dbms_random.normal from dual;

效果

1个数 .52557734414602318474391555193265054246752个数 -.83779008709528581040393535665502151994343个数 -.96669983295443501700219508477270036853234个数 -1.551759360655889541504749398531614910695个数 -1.13225873142538222140906958281318852426个数 .46007159698212949641985649885922113603147个数 .83735027511067041700934411289396553930428个数 .24637381341759699991454813257019435774369个数 .0654702821023234490540766797332884757942

6、随机字符串

select dbms_random.string(opt, length) from dual;
  opt 可取值如下:

  'u','U'    :    大写字母

  'l','L'    :    小写字母

  'a','A'    :    大、小写字母

  'x','X'    :    数字、大写字母

  'p','P'    :    可打印字符

效果

-- select dbms_random.string('u', 10) from dual;1个数 KCOYARJOEJ
 第2个数 VSFPXHYSGB
 第3个数 GIFWHDBXPI
 第4个数 IRUPMBTIWS
 第5个数 WWFNVXOHCE
 第6个数 ZYEEMSFQWP
 第7个数 ZSGZZHUZXU
 第8个数 ZVPLPCFTDK
 第9个数 IBWUNUJAGI

7、随机日期

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

效果

1个数 13-8-072个数 13-9-073个数 25-12-064个数 29-1-075个数 19-8-076个数 14-10-077个数 09-2-078个数 12-12-079个数 10-6-07

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

select to_char(sysdate,'J') from dual;

效果

1个数 24594852个数 24594843个数 24594834个数 24594825个数 24594816个数 24594807个数 24594798个数 24594789个数 2459477

8、生成GUID

select sys_guid() from dual;

效果

1个数 54E8920AD7C34F979DB2E1D39A6987AC
 第2个数 867A46817CDC400ABBBB65EE2D780E54
 第3个数 95FA1A0CF4264977833D5BC6C3FCCF63
 第4个数 E6352B4EB73F41F78CAC9653340AF3D6
 第5个数 6DE03B07F50849DC9B54E94F9EE437B1
 第6个数 8D70F3B9619B4BF1A30BA44449C3B61C
 第7个数 BB9EE6DC4AF04991A806984DECC3C7C3
 第8个数 641CCB25FCB94E139C8F12B13EFA6FA1
 第9个数 8C3BC8202CE64DCA9F4C3059D9E3058F

尝试一下


DECLARE
	str VARCHAR2(100);
BEGIN

	DBMS_OUTPUT.PUT_LINE(chr(10)||'1、小数( 0 ~ 1)');
	FOR i IN 1..9 LOOP
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.value);		
	END LOOP;
	
	DBMS_OUTPUT.PUT_LINE(chr(10)||'2、小数( 0 ~ 100)');
	FOR i IN 1..9 LOOP
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.value(0, 100));
	END LOOP;
	
	DBMS_OUTPUT.PUT_LINE(chr(10)||'3、指定范围内的整数 ( 0 ~ 100 )');
	FOR i IN 1..9 LOOP
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||trunc(dbms_random.value(0,100)));
	END LOOP;
	
	DBMS_OUTPUT.PUT_LINE(chr(10)||'4、长度为20的随机数字串');
	FOR i IN 1..9 LOOP
		SELECT substr(cast(dbms_random.value as varchar2(38)),3,20) INTO str FROM dual;
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||str);
	END LOOP;
			
	DBMS_OUTPUT.PUT_LINE(chr(10)||'5、正态分布的随机数');
	FOR i IN 1..9 LOOP
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.normal);
	END LOOP;
			
	DBMS_OUTPUT.PUT_LINE(chr(10)||'6、随机字符串');
	FOR i IN 1..9 LOOP		
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.string('u', 10));
	END LOOP;
			
	DBMS_OUTPUT.PUT_LINE(chr(10)||'7、随机日期');
	FOR i IN 1..9 LOOP		
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J'));
	END LOOP;
			
	DBMS_OUTPUT.PUT_LINE(chr(10)||'指定日期的基数');
	FOR i IN 1..9 LOOP		
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||to_char(sysdate-i,'J'));
	END LOOP;
			
	DBMS_OUTPUT.PUT_LINE(chr(10)||'8、生成GUID');
	FOR i IN 1..9 LOOP		
		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||sys_guid());
	END LOOP;
			
-- 	DBMS_OUTPUT.PUT_LINE('');
-- 	FOR i IN 1..9 LOOP		
-- 		DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||);
-- 	END LOOP;
-- 

END;


如果本文对你有帮助,还请点个赞喔!(●’◡’●)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值