DB2中如何取得随机数

转自: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中没有相应的函数。

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


SET SCHEMA DB2INST1;

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","DB2INST1";

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

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

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

原文地址:https://www.cnblogs.com/wangpei/p/3552790.html