From: http://www.heysky.net/archives/2006/10/oracle_sqlserver_random.html
在数据库操作中经常会碰到使用随机数的问题,几天前翔哥来问我关于 SQLServer 批量产生随机数的问题,记得之前他也问过我 Oracle 下面随机数的问题,当时找到了一些资料但没来得及整理,今天正好把 Oracle 和 SQLServer 下的随机数问题整理一下。
1. 产生随机数
Oracle
Oracle 下随机数可以用 DBMS_RANDOM 包来实现,他调用 Oracle 内部随机数生成器来产生随机数,具体使用可以参考文档,另外 psoug 上有更详细的参考。
SQLServer
SQLServer 下可以用 RAND 函数产生随机数,不过这个函数似乎只能一次产生一个随机数,如果大批量产生随机数,都是重复的(在 Oracle 中使用 DBMS_RANDOM 产生的随机数不太会重复):
SELECT TOP 5 RAND()
FROM sysobjects
0.72910389475358373
0.72910389475358373
0.72910389475358373
0.72910389475358373
0.72910389475358373
之后 google 了一下,找到了邹建的一篇文章,巧妙地通过 CHECKSUM(NEWID()) 产生随机数,并用 RIGHT 函数获得其中几位(我觉得用 Left 更好,这样可以防止首位为 0,从而避免插入数据时位数变少),这样不但很好地实现了批量产生随机数,效率也不错。
2. 随机从表中取数
Oracle
之前就是在 Oracle 下碰到了这个问题才去研究随机数,发现非常有意思,方法可以概括为两大类,一类就是根据随机数来 Order by 从而将数据随机排列。这类方法又可以分为两种方法,一种就是用 dbms_random 产生随机数:
select *
from (select * from t order by dbms_random.value)
where rownum < 50;
根据 jametong 所说,由于随机数发生器本身初始化需要时间,而且产生随机数的过程中会频繁读取数据库,所以这种方法效率最差。第二种方法是用 dbms_utility.get_hash_value 产生随机数:
select *
from (select dbms_utility.get_hash_value(to_char(dbms_utility.get_time) ||
tb1.col1,2,1048576) rand_num,
a.*
from tb1
order by rand_num)
where rand_num <= 50;
这种方法效率稍好。第二类方法就是用 sample 对表做采样,这是效率最高的方法:
SELECT emp FROM emp SAMPLE(10);
SAMPLE(n) 是一个很有用的方法,它随机从表中抽取 n% 的数据,但并不是一定是 n% 可能小于该值,所以如果总共 1000 行数据,要随机取 100 行,最好将 n 设得大于 10。另外,这种方法只能用于一个表,from 后不能有多个表。
SQLServer
SQLServer 下只想到了 Order by 的方法,由于 rand() 产生重复,所以还是可以用 NEWID() 的方法:
分享到:
相关推荐
SQLserver生成随机数
现在切入正题: 随机函数:rand() 在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558, 像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数。...
本文介绍了Oracle里取随机数的几种具体的方法。
25.SQL Server 2014随机数的产生.mp4 26.SQL Server 2014 GETDATE() GETUTCDATE().mp4 27.SQL Server 2014 CONVERT函数.mp4 28.SQL Server 2014 DATEDIFF函数.mp4 29.SQL Server 2014 DATEPART函数.mp4 30.SQL...
本文以实例的方式来讲解如何抽取随机数的多种方法。
25.SQL Server 2014随机数的产生.mp4 26.SQL Server 2014 GETDATE() GETUTCDATE().mp4 27.SQL Server 2014 CONVERT函数.mp4 28.SQL Server 2014 DATEDIFF函数.mp4 29.SQL Server 2014 DATEPART函数.mp4 3.SQL ...
25.SQL Server 2014随机数的产生.mp4 26.SQL Server 2014 GETDATE() GETUTCDATE().mp4 27.SQL Server 2014 CONVERT函数.mp4 28.SQL Server 2014 DATEDIFF函数.mp4 29.SQL Server 2014 DATEPART函数.mp4 3.SQL ...
工作中会遇到SQL Server模拟数据生成以及数值列值(如整型、日期和时间数据类型)随机填充等等任务,这些任务中都要使用到随机数。鉴于此,本文将对SQL Server中随机数的使用简单做个总结 。 T-SQL 随机有关的三个...
自定义Oracle函数,向Oracle数据库中插入随机数。
oracle中随机数的获取 通过sql获取各种类型的随机数
随机数随机数随机数随机数随机数随机数随机数随机数
SQLServer和Oracle的常用函数对比 共计45点 1.绝对值 2.取整(大) 3.取整(小) 4.取整(截取) 5.四舍五入 6.e为底的幂 7.取e为底的对数 8.取10为底对数 9.取平方 10.取平方根 11.求任意数为底的幂 12.取...
-- 随机数 -- 产生业务流水号 -- 查询某张表中有哪些字段 -- 自循环表中 由叶子节点查父节点 -- 查子节点 复制一张表的数据到另外一张表中 PLSQL中存储过程及游标的基本使用 Oracle中恢复某张表丢失数据的方法 -- 把...
MSSQL有一个函数CHAR()是将int(0-255) ASCII代码转换为字符。那我们可以使用下面MS SQL语句,可以随机生成小写、大写字母,特殊字符和数字
declare @i int 定义一个变量 再利用rarnd()函数进行读取
在一个时间点 生成多个随机数 ,可以灵活的应用 解决生成多个随机数问题,举例 一套试卷 给多个考生 考试,给每个考生的题目顺序打乱,
在sqlserver中,有newid()生成随机数,我这里的是自定义生成随机数,可以用在asp,asp.net等b/s页面中,
js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数js随机数...