oracle生成隨機數函式

2021-09-30 18:48:34 字數 2380 閱讀 3361

create or replace 

function createuniquekey(str_begin in varchar2,str_date in varchar2,date_date in date

,str_date_format in varchar2,bool_is_timestamp in char,int_random_length in int)

return  varchar2

as--str_begin 開始字元

--str_date 字串型別日期,使用時忽略日期型別date_date及其格式化str_date_format引數

--date_date 日期型別日期

--str_date_format 日期型別日期格式化format

--bool_is_timestamp 是否使用時間戳

--int_random_length 隨機數長度,請不要超過35位

--生成規則:開始字元+格式化日期(或者時間戳)+隨機數

--createuniquekey('l','',sysdate,'','0',5)  使用預設日期格式結果:l2017090501131231524

--createuniquekey('l','',null,'yymmdd-','0',5)  使用當前時間自定義日期格式結果:l170905-73080

--createuniquekey('l','',sysdate,'yymmdd-','1',5)  使用時間戳結果:l150454530538674643

--createuniquekey('l','2017/9/8',sysdate,'yymmdd-','0',5)  使用字串日期結果:l2017/9/890691

return_str varchar2(4000);

str_my_date_format varchar2(40);

date_my_str varchar2(40);

date_my_date date;

str_random varchar2(4000);

begin

return_str := str_begin;

if str_date = '' or str_date is null then--字串型別的日期不存在時,使用日期型別的日期

if date_date is null then

date_my_date := sysdate;

else

date_my_date := date_date;

end if;

if bool_is_timestamp = '0' then

--不使用時間戳,根據format格式得到字串型別日期

if str_date_format = '' or str_date_format is null then

str_my_date_format := 'yyyymmddhh24miss';

else 

str_my_date_format := str_date_format;

end if;

date_my_str := to_char(date_my_date,str_my_date_format);

end if;

else--字串型別的日期格式存在時,直接利用此字串日期

if bool_is_timestamp = '0' then

date_my_str := str_date;

else

--使用時間戳,需要將字串型別轉換程日期型別來計算時間戳

date_my_date := to_date(str_date,'yyyy-mm-dd hh24:mi:ss');

end if;

end if;

--使用時間戳,計算得出

if bool_is_timestamp = '1' then

date_my_str := to_char((date_my_date - to_date('1970-1-1 8', 'yyyy-mm-dd hh24')) * 86400000 

+ to_number(to_char(systimestamp, 'ff3')));

end if;

return_str := return_str || date_my_str;

--生成隨機數

if int_random_length > 0 then

str_random := substr(to_char(dbms_random.value),2,int_random_length);

return_str := return_str || str_random;

end if;

return(return_str);

end;

Oracle生成隨機數

38 位精度的隨機數 例如 2080.540270297243047172097413955732485122 selectdbms random value 1,9999 fromdual 四位數,取整 selecttrunc dbms random value 1000 9999 fromdua...

Oracle中生成隨機數的函式

在oracle中的dbms random程式包中封裝了一些生成隨機數和隨機字串的函式,其中常用的有以下兩個 dbms random.value函式 該函式用來產生乙個隨機數,有兩種用法 1.產生乙個介於0和1之間 不包含0和1 的38位精度的隨機數,語法為 dbms random.value ret...

利用隨機函式生成隨機數

給定乙個rand 可以產生從0到rand max的隨機數,其中 rand max 很大 常見值 16位int能表示的最大整數32767 寫出利用rand 生成 a,b 中任意整數的函式,其中a 0,b rand max,且b a 分析 這是在程式設計工作最常見的隨機函式的應用,在這裡做乙個起點再合適...