sql随机记录之如何解决每次RND的结果都一样的问题?
作者:cg1 发布时间:2007-09-11 13:24:00
问题:
关于如何生成随机记录(二)
如何从指定表中随机抽取一定量的记录?
sql server 中 select top 10 * from 表 order by newid(); 在access中如何实现?
为什么我每次 select top ?? ... from... rnd(id) 的结果都一样呢?
方法一:
在ACCESS环境中用rnd函数解决,非常简单
以下查询展示了如何从表中随机抽取10条记录
SELECT top 10 表1.*, Rnd(id) AS bb FROM 表1 ORDER BY Rnd(id)
其中 Rnd(id) AS bb 只是为了说明其原理,完全可以去掉。
另外, Rnd(id) 其中的id只是为了提供一个种子,可以利用其他任何数值来完成
id字段是自动编号字段,你也可以用其他字段代替,只要能生成数值就行,比如我用姓名字段
SELECT top 10 表1.*, Rnd(len(姓名)) AS bb FROM 表1 ORDER BY Rnd(len(姓名))
有网友说每次 RND 得到的结果都一样,那是因为没有使用 Randomize 语句来初始化随机数生成器。
Randomize 语句
初始化随机数生成器。
语法
Randomize [number]
可选的 number 参数是 Variant 或任何有效的数值表达式。
说明
Randomize 用 number 将 Rnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。
如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。
注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。
方法二:
在ASP、VB中无法使用上述方法,可以参考使用adodb.recordset.recordcount 属性以及 adodb.recordset.AbsolutePosition 以及 RND 函数来解决问题。
Function RndID()
Dim rs As New ADODB.Recordset
Dim strsql As String
strsql = "select * from 1"
rs.CursorLocation = adUseClient
rs.Open strsql, CurrentProject.Connection, 2, 3
’在Access中可以使用 CurrentProject.Connection,
’其他语言中可以用 ADODB.CONNECTION对象。
Dim i As Long
Dim lngCount As Long
Dim lngRnd As Long
lngCount = rs.RecordCount
’一下取前10条随机记录
For i = 1 To 10
lngRnd = Int((lngCount * Rnd) + 1)
rs.AbsolutePosition = lngRnd
Debug.Print rs("id")
Next
End Function
AbsolutePosition 属性
指示 Recordset 对象的当前记录的序号位置。
设置和返回值
设置或返回从 1 到 Recordset 对象 (PageCount) 中的记录数的 Long 值,或者返回一个 PositionEnum 值。
说明
要设置 AbsolutePosition 属性,ADO 要求您正在使用的 OLE DB 提供者实现 IRowsetLocate 接口。
访问用仅向前或动态游标打开的 Recordset 的 AbsolutePosition 属性将产生错误 adErrFeatureNotAvailable。使用其他游标类型时,只要提供者支持 IRowsetScroll 接口,就会返回正确的位置。如果提供者不支持 IRowsetScroll 接口,该属性将被设置为 adPosUnknown。要确定您的提供者是否支持 IRowsetScroll,请参阅提供者的文档。
使用 AbsolutePosition 属性根据在 Recordset 对象中的序号位置移动到某一记录,或确定当前记录的序号位置。提供者必须支持相应的功能才能使用此属性。
与 AbsolutePage 属性一样,AbsolutePosition 也是从 1 开始,并且当前记录是 Recordset 的第一个记录时等于 1。可以通过 RecordCount 属性获取 Recordset 对象中记录的总数目。
设置 AbsolutePosition 属性时,即使该属性指向当前缓存中的记录,ADO 也将使用以用户指定的记录开始的新记录组来重载缓存。CacheSize 属性决定此记录组的大小。
注意 不应将 AbsolutePosition 属性作为替代的记录编号使用。删除前面的记录时,给定记录的位置将发生更改。如果重新查询或重新打开 Recordset 对象,则无法保证给定的记录会有相同的 AbsolutePosition。书签仍然是保持和返回给定位置的建议方式,并且是跨越 Recordset 对象的所有类型定位的唯一方式。
请参阅
Visual Basic 范例 | Visual C++ 范例 | Visual J++ 范例
AbsolutePage 属性 | RecordCount 属性
适用于:Recordset 对象
相关阅读:


猜你喜欢
- if判断判断的定义 如果条件满足,就做一件事;条件不满足,就做另一件事; 判断语句又被称为分支语句,有判断,才有分支;i
- 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XG
- 一.基本数据类型整数:int字符串:str(注:\t等于一个tab键)布尔值: bool列表:list 列表用[]元祖:tuple元祖用()
- flash param参数和属性下列标记属性和参数描述了由“发布”命令创建的 HTML 代码。在编写自己的用于显示 Flash 内容的 HT
- 该章节为 Python自动化办公篇 的最后一章,通过定时任务发送邮件的方式学习定时模块的使用 --> schedule 。(该章内容篇
- 任何数据库系统都无法避免崩溃的状况,即使你使用了Clustered,双机热备等等,仍然无法完全根除系统中的单点故障,何况对于大部分用户来说,
- get如果请求url没有变化,取出缓存,提高效率;请求会缓存到浏览器中,可以通过历史记录查看用户信息,安全性低;post传送变化的数据显示,
- 点击率预估模型0.前言本篇是一个基础机器学习入门篇文章,帮助我们熟悉机器学习中的神经网络结构与使用。日常中习惯于使用Python各种成熟的机
- scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法。例如:贝叶斯,svm,knn等。scikit-l
- PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,
- isNaN函数 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字)。 NaN 即 Not a Number isN
- 失效的书签们我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签。然而当我们面对成百
- 引言第一次了解python的WSGI,可能描述的不太准确。本篇文章所依赖的python环境为:什么是WSGIWSGI也称之为web服务器通用
- 一 例子现在,讲述一个真实的故事!故事一定是伴随着赵忠祥老师的声音开始的,雨季就要来临了,又到了动物们 * 的季节了...还记得,之前发生的作
- 本机环境: Windows 10服务器环境: Windows Server 2012 R2背景:公司需要我开发一个简单的web应用。开发的时
- 这几天研究UTF-8编码,太晕了,把我的看法和各位讨论讨论。欢迎来批啊。以下都是我的想法,哪里有不对的请不吝赐教,帮忙指出来。相关的题外话:
- 使用Python进行插值非常方便,可以直接使用scipy中的interpolateimport numpy as npx1 = np.lin
- 定义一个什么都不做的函数>>> def a():... pass...>>> def printHell
- 本文实例讲述了Python数据类型之Tuple元组。分享给大家供大家参考,具体如下:tuple元组1.概述本质上是一种有序的集合,和列表非常
- HTTPS简介HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有