关于SQL如何取随机数问题

关于SQL如何取随机数问题,第1张

Oracle的随机数产生函数(DBMS_RANDOM )

2007-10-17 17:12

Oracle8 80版介绍了DBMS_RANDOM包,Oracle8i 816版介绍了DBMS_RANDOM包的新功能,但Oracle8i 文档中没有详细全面介绍其功能。幸运的是:有一个新的DBMS_RANDOM包函数能够返回0-1之间的随机数。这个新函数是:

◆ FUNCTION value RETURN NUMBER;

◆ FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;

◆ FUNCTION normal RETURN NUMBER;

◆ FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;

VALUE函数的第一种形式返回一个大于或等于0且小于1的随机数;第二种形式返回一个大于或等于LOW,小于HIGH的随机数。下面是其用法的一个示例:

SQL> select dbms_randomvalue, dbms_randomvalue(55,100) from dual;

VALUE DBMS_RANDOMVALUE(55,100)

--------------- -----------------------------

782821936 796367038

NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。事实上,这就是你在清单1中所看到的。

最后,是STRING函数。它返回一个长度达60个字符的随机字符串。参数OPT可以是清单2显示的值中的任何一个单个字符。

关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:

select text from all_source

where name = 'DBMS_RANDOM'

and type = 'PACKAGE' order by line;

oracle 里面能实现,sqlserver里面不知道有没有分析函数

给你个参考

select

from

(

select id,name,tid,rank()over(partition by tid order by sys_guid())rnd

from table

) t

where rnd <= 5

其中

rank()over(partition by tid order by sys_guid())

的作用是求按tid分组然后按照sys_guid(相当于sql中的newid)排序后这一行所处的名次

其实很简单:建表,7列。

CREATE TABLE test

(

A int,

B int,

C int,

D int,

E int,

F int,

G int

)

随机插入数据,前六列是1-32的随机整数,最后一列是1-16的随机整数

INSERT test VALUES

(

ceiling(rand()32),

ceiling(rand()32),

ceiling(rand()32),

ceiling(rand()32),

ceiling(rand()32),

ceiling(rand()32),

ceiling(rand()16)

)

多INSERT几次,然后SELECT FROM test显示结果

32 8 32 17 24 19 7

8 15 10 15 12 13 7

24 3 25 2 24 5 9

15 22 12 13 27 15 4

以上为INSERT 4次后的测试结果。

以上就是关于关于SQL如何取随机数问题全部的内容,包括:关于SQL如何取随机数问题、sql随机取n条数据、sql 小程序随机从33个数中取6个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9620699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存