首页 > 数据库技术 > 详细

DB2中如何取得随机数

时间:2014-02-18 08:03:13      阅读:785      评论:0      收藏:0      [点我收藏+]

转自:http://blog.csdn.net/jionghan3855/article/details/2246738

在DB2数据库自定义产生指定位数的随机数函数。

DB2产生随机数的函数:RAND()

例:SELECT INT(RAND()*100) FROM  SYSIBM.SYSDUMMY1; --产生0-100之间的随机数。

注:RAND()返回的为0-1之间的任意浮点数,所以需要使用INT将浮点数转换为整数,去掉小数位。

如果生成固定位数的随机数,需要自己写函数实现。

在 ORACLE中,提供了补位的方法供调用(lpad()),但在DB2中没有相应的函数。

 

 

以下是我写的产生固定位数随机数的函数:

bubuko.com,布布扣
bubuko.com,布布扣
SET SCHEMA DB2INST1;
bubuko.com,布布扣
bubuko.com,布布扣
SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","DB2INST1";
bubuko.com,布布扣
bubuko.com,布布扣
CREATE FUNCTION DB2INST1.F_RANDOM
bubuko.com,布布扣 ("IN_LENGTH" 
INTEGER
bubuko.com,布布扣 ) 
bubuko.com,布布扣  
RETURNS INTEGER
bubuko.com,布布扣  SPECIFIC DB2INST1.F_RANDOM
bubuko.com,布布扣  LANGUAGE SQL
bubuko.com,布布扣  
NOT DETERMINISTIC
bubuko.com,布布扣  READS SQL DATA
bubuko.com,布布扣  STATIC DISPATCH
bubuko.com,布布扣  CALLED 
ON NULL INPUT
bubuko.com,布布扣  EXTERNAL ACTION
bubuko.com,布布扣  INHERIT SPECIAL REGISTERS
bubuko.com,布布扣  
BEGIN atomic
bubuko.com,布布扣    
declare v_newLength INTEGER;
bubuko.com,布布扣    
declare v_random INTEGER;
bubuko.com,布布扣    
declare v_length INTEGER;
bubuko.com,布布扣    
declare v_index INTEGER;
bubuko.com,布布扣    
declare out_result VARCHAR(30);
bubuko.com,布布扣    
IF in_length > 30 THEN
bubuko.com,布布扣      
RETURN 0;
bubuko.com,布布扣    
END IF;
bubuko.com,布布扣    
bubuko.com,布布扣    
SET v_random = INTEGER(RAND()*POWER(10,in_length));
bubuko.com,布布扣    
SET v_length = in_length - LENGTH(RTRIM(CHAR(v_random)));
bubuko.com,布布扣    
SET v_index = 1;
bubuko.com,布布扣    
SET out_result = CHAR(v_random);
bubuko.com,布布扣    
WHILE v_index <= v_length DO
bubuko.com,布布扣      
SET out_result = CONCAT(8,out_result);--位数不够,前面补8
bubuko.com,布布扣      
SET v_index = v_index + 1;
bubuko.com,布布扣    
END WHILE;
bubuko.com,布布扣    
SET v_random = INTEGER(out_result);
bubuko.com,布布扣    
RETURN v_random;
bubuko.com,布布扣  
END;
bubuko.com,布布扣

 

调用自定义函数,产生8位的随机数,如下:

例:SELECT F_RANDOM(8) FROM  SYSIBM.SYSDUMMY1;--产生8位的随机数。

DB2中如何取得随机数

原文:http://www.cnblogs.com/wangpei/p/3552790.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!