在实际开发中可能经常遇到需要时间戳+随机数生成唯一编码的情况,那么如何实现?
以下介绍一下dbms_random包 中value函数
dbms_random.value该函数提供了38位精度的随机数,
例如:6.89179512313451604112650798782938264414
select dbms_random.value(1,100) from dual;--取100以内的随机数
实际过程中往往我们不需要后面的小数点,那么利用trunc函数截取就好了
select trunc(dbms_random.value(1,100)) from dual;--取100以内的随机整数
那么取时间戳+随机数(如:20220426151734898018)sql如下:
select TO_CHAR(SYSDATE, 'yyyymmddhh24miss') ||
TRUNC(DBMS_RANDOM.VALUE(100000, 999999))
from dual;
完美!
dbms_random函数包拓展延伸:
1、dbms_random.normal:获取正态分布的随机数
select dbms_random.normal from dual;
2、dbms_random.string用法:获取指定字符串
'u','U' : upper case alpha characters only
'l','L' : lower case alpha characters only
'a','A' : alpha characters only (mixed case)
'x','X' : any alpha-numeric characters (upper)
'p','P' : any printable characters
select dbms_random.string('u', 10)
from dual
union all
select dbms_random.string('U', 10)
from dual
union all
select dbms_random.string('l', 10)
from dual
union all
select dbms_random.string('L', 10)
from dual
union all
select dbms_random.string('a', 10)
from dual
union all
select dbms_random.string('A', 10)
from dual
union all
select dbms_random.string('x', 10)
from dual
union all
select dbms_random.string('X', 10)
from dual
union all
select dbms_random.string('P', 10)
from dual
union all
select dbms_random.string('P', 10) from dual;
补充:利用dbms_random.value获取随机日期
select to_char(to_date('2022/01/01','yyyy/mm/dd'),'J') from dual;--2459581
select to_date(trunc(dbms_random.value(2459581,2459581+364)),'J') from dual;--2022年内的任意日期
谢谢!