天天看點

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位的随機數。