Oracle dbms_random 生成随机数 随机字符串 随机日期

Intro

  • 背景
    需求:数据表中有几列数据为空(不全),我需要填充他们,以便测试。
    解决方法大致有几种:

    • 依赖层最多的一项:写代码执行数据库插入操作。在编程语言拼SQL参数的时候,插入生成的随机数。
    • 写代码,利用for循环 + 随机数/随机字符串,生成SQL的写操作语句。然后在数据库客户端执行这些语句。
    • 依赖最少的一项:直接在SQL中生成随机数。直接执行SQL语句即可。保存SQL片段也方便,以便下次执行。
      不想很麻烦的去编写接口。所以我选了第三种。
  • 以下是我最终的SQL格式:

update table_name 
set 
    field1 = 随机数,
    field2 = 随机字符串,
    field3 = 随机日期

注意以上语句没有where子句。也就是说会对表中的所有记录的对应字段进行值的修改,效果相当于for循环

SQL

  • 测试语句
    select xxx from dual,其中xxx可为任意值

随机数

dbms_random.value 返回一个随机数,区间在[0, 1),注意区间为左开右闭即区间不包含1。
dbms_random.value(a, b) 返回一个随机数,区间在[a, b),同样:b不在区间内。
NOTE 以上两种方法,返回值都带着一串小数。
想要截取整数,要用到trunc(number, precision),如:trunc(123.456)返回123。(precision默认为0)

随机字符串

random.string('L', length) 返回长度为length、由随机的小写字符填充的字符串。
第一个参数的可选值:
L Lower 小写的。
U Upper 大写的。
A Admix 大小写混合的。

随机日期

每个日期对应一个数值。
首先,查看今天的数值:to_char(sysdate, 'J') 今天是2020-02-16,返回值为2458901

那我想生成的日期范围:[今天, 今天+30天],即从天开始的30天(第30天不包含)。
to_date(2458901, 'J') 就是今天(date类型)
to_date(2458901 + 30, 'J') 就是30天后。
由随机函数生成这个要增加的数值,可以达到目的。
to_date(2458901 + trunc(dbms_random.value(1, 30)), 'J')

Others

trunc(sysdate, 'J')

发布了283 篇原创文章 · 获赞 156 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/wuyujin1997/article/details/104348649