
Private Sub Command1_Click()
MsgBox GetRndItem(3)
End Sub
Function GetRndItem(num As Integer) As String
Dim a
a = Split("125 625#235 456#658 125#125 151#152 841#152 151", "#")
Dim i As Integer
Randomize
Dim Index As Integer
Dim Text As String
Dim arU As Integer
arU = UBound(a)
If num > arU + 1 Then num = arU + 1
For i = 1 To num
Index = Int(Rnd arU)
Text = Text & vbTab & a(Index)
a(Index) = a(arU)
arU = arU - 1
Next
GetRndItem = Mid(Text, 2)
End Function
每次产生一随机数组索引,随机索引范围是从最小下标到最大下标前一位。取出随机位的数组元素
之后,用最后一数组元素替换该位,然后把最后一位用Redim preserve压缩掉。不过压缩不用了,只要用一个变量arU来表示数组中最大有效数下标位就可。
我这只是思路啊,这个要实现的话要使用多线程技术
一个线程负责产生随机数与抽取数据
1首先一个随机数
对比内变量里的随机数,是否有重复,如果重复则此次无效,重新生成
2,根据此随机数抽取数据库中数据。
另一个线程负责清空内存变量的数据
即此线程开着一个计时器,然后根据时间来清除数据
希望对你有所帮助
监床试验随机数字重复相同的处理方法主要有以下几种:
1、重新随机选取:将重复的数字重新从数据库中抽取,确保抽取的数字不会重复。
2、存储统计:建立一个专门的表存储统计,记录抽取的重复数字,并有个记录表来判断可否再次抽取。
3、连续抽取:可以从抽取到重复数字的位置开始,按顺序连续抽取,直到出现新的非重复数字。
4、组合抽取:可以将重复的数字进行组合,组合抽取,确保抽取的数字不会重复。
一、Oracle取随机数据 1、Oracle访问数据的基本方法: 1)、全表扫描(Full table Scan):执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,且每个数据块Oracle只读一次这样全表扫描能够受益于多块读 2)、采样表扫描(sample table scan):扫描返回表中随机采样数据,这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项 注:从Oracle8i开始Oracle提供采样表扫描特性
2、使用sample获得随机结果集 21、语法: SAMPLE BLOCK [ SEED (seed_value) ] SAMPLE选项:表示按行采样来执行一个全表扫描,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。 BLOCK: 表示使用随机块例举而不是随机行例举。 sample_percent:是随机获取一张表中记录的百分比。比如值为10,那就是表中的随机的百分之10的记录。 值必须大于等于000001,小于100。
SEED:表示从哪条记录返回,类似于预先设定例举结果,因而每次返回的结果都是固定的。该值必须介于0和4294967295之间。
22、举例说明
(1)sample(sample_percent):
(2)、sample block(sample_percent)
(3)、sample block(sample_percent) seed(seed_value)
注意以下几点:
1sample只对单表生效,不能用于表连接和远程表 2sample会使SQL自动使用CBO
3、使用DBMS_RANDOM包 DBMS_RANDOM有两种主要的使用方法分别是:DBMS_RANDOMVALUE()和DBMS_RANDOMRANDOM
4、使用 内部函数sys_guid()
注:
在使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,查找相关资料,有些说是和 *** 作系统 有关,在windows平台下正常,获取到的数据是随机的,而在 Linux 等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,这就是说,它很可能是随机的,但是并不表示一定是百分之百的这样。
所以,为确保在不同的平台每次读取的数据都是随机的,我们大多采用使用sample函数或者DBMS_RANDOM包获得随机结果集,其中使用sample函数更常用,因为其查询时缩小了查询范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有明显的提高。
比如:
cc列如下:
xxx
vvv
bbbb
ccc
xxx
想只要显示
xxx
vvv
bbbb
ccc
解决方法如下:
如果得到所有值不重复。
select cc from tablename group by cc
或
select distinct cc form tablename
如果得到没有重复的所有制,
select cc from tablename group by cc
minus
select cc
from(
select cc,count() from tablename group by cc having count()>1) A
说下我的想法
可以把单词存在一个list里,也可以直接存在数据库中。
利用Random创建一个随机数,处理成什么形式的数字看要求,我觉得4位的10进制数就行
然后:list用listget(),在数据库中用ResultSet遍历。
用Random创建的随机数做参数提取单词。
最后System,outprint();
这个只能在控制台输出,若是CS模式的程序还要用到Swing。
关于使用ASP随机查询数据库中的数据,有两种两见的数据库,即Sql Server 和 Access。
SQL server数据库有个NewID函数,可以很方便的用SQL语句得到数据表中的随机数据。即可以使用以下SQL语句来实现:
sql="Select top 10 from TableName order by NewId()"
Access数据库同样提供一个Rnd函数,可以通过以下SQL语句来实现随机:
sql="select top 10 from TableName order by Rnd(id)"
Rnd(id) 其中的id只是为了提供一个种子,可以利用其他任何数值来完成。在这里Id为主键的值,因为通常而言,主键一般为自动编号字段,即数值型。
可通过使用后发现,程序在第一次执行时是可以实现随机取得记录,但反复刷新后发现,每次返回的数据都相同。分析后发现,由于Access数据库记录集缓存的原因,从代码里得到Access数据库随机记录是得不到,需要用随机SQL语句的办法来消除缓存。
有人说在程序中加上Randomize初始化随机种子,这只说对了一半,在程序中简单的加上Randomize,是没作用的,道理很简单,Randomize不可能影响SQL语句中的Rnd,这个Rnd只不过是个字符串,SQL语句是通过数据库引擎去执行的,正因为如此,无法初始化种子,致使每次应用产生的随机序列是一样的。
由此可见,解决问题的关键就是如何初始化随机种子。Rnd函数语法是Rnd(number),它有一个特性,就是如果使用了负参数的 number,那么就会产生一个固定的随机序列。利用这个特性,我们的问题就迎刃而解了,这就是每次调用Rnd函数时,使用一个负的不同的number,从而达到产生不同随机序列的目的。经过测试,问题解决。使用如下代码即可使用正确的随机。
Randomize
sql="select top 10 from TableName order by Rnd("&Rnd()&"-id)"
SQL数据重复分几种情况,一种是原数据重复,第二种是粒度重复,第三种是分布重复。
原数据重复的情况,你直接可以distinct掉,例如,学生表当中有两个重复的学号,你想取出不重复的,直接可以写:select
distinct
学号
from
学生表
第二种是查询粒度重复,比如你有一张表是存储区域的,分别为省、市、县三列。而你需要的是只查找不同的省市,则也可以使用distinct:select
distinct
省,市
from
区域
第三种则是分布重复,比如在join
的时候,左右两个表格存在一对多的关系,造成的重复,或者在聚合之后出现了维度重复,则这种相对来说比较麻烦,你需要在子查询中统计或查找出唯一值,然后再去关联,或者是按照一定的数据需求的取数规则,在查询结果后再进行聚合,取到唯一值。
不过不管怎么样,都是要看实际需求是什么样子的。大多可以用子查询和关联联合解决。
以上就是关于vb随机取数组内数字,不重复!全部的内容,包括:vb随机取数组内数字,不重复!、C# 数据库随机抽取数据、临床试验随机数字重复相同处理方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)