天天看点

DB2中如何取得随机数

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

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

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

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

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

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

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

DB2中如何取得随机数
DB2中如何取得随机数

SET SCHEMA DB2INST1;

DB2中如何取得随机数
DB2中如何取得随机数

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

DB2中如何取得随机数
DB2中如何取得随机数

CREATE FUNCTION DB2INST1.F_RANDOM

DB2中如何取得随机数

 ("IN_LENGTH" INTEGER

DB2中如何取得随机数

 ) 

DB2中如何取得随机数

  RETURNS INTEGER

DB2中如何取得随机数

  SPECIFIC DB2INST1.F_RANDOM

DB2中如何取得随机数

  LANGUAGE SQL

DB2中如何取得随机数

  NOT DETERMINISTIC

DB2中如何取得随机数

  READS SQL DATA

DB2中如何取得随机数

  STATIC DISPATCH

DB2中如何取得随机数

  CALLED ON NULL INPUT

DB2中如何取得随机数

  EXTERNAL ACTION

DB2中如何取得随机数

  INHERIT SPECIAL REGISTERS

DB2中如何取得随机数

  BEGIN atomic

DB2中如何取得随机数

    declare v_newLength INTEGER;

DB2中如何取得随机数

    declare v_random INTEGER;

DB2中如何取得随机数

    declare v_length INTEGER;

DB2中如何取得随机数

    declare v_index INTEGER;

DB2中如何取得随机数

    declare out_result VARCHAR(30);

DB2中如何取得随机数

    IF in_length > 30 THEN

DB2中如何取得随机数

      RETURN 0;

DB2中如何取得随机数

    END IF;

DB2中如何取得随机数
DB2中如何取得随机数

    SET v_random = INTEGER(RAND()*POWER(10,in_length));

DB2中如何取得随机数

    SET v_length = in_length - LENGTH(RTRIM(CHAR(v_random)));

DB2中如何取得随机数

    SET v_index = 1;

DB2中如何取得随机数

    SET out_result = CHAR(v_random);

DB2中如何取得随机数

    WHILE v_index <= v_length DO

DB2中如何取得随机数

      SET out_result = CONCAT('8',out_result);--位数不够,前面补8

DB2中如何取得随机数

      SET v_index = v_index + 1;

DB2中如何取得随机数

    END WHILE;

DB2中如何取得随机数

    SET v_random = INTEGER(out_result);

DB2中如何取得随机数

    RETURN v_random;

DB2中如何取得随机数

  END;

DB2中如何取得随机数

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

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