用存储过程可以不?不过这样你就只能把改行记录取出来了; 原理还是一样,就是设置条件 让rownum等于一个随机的自然数,而且这个自然数在1到总行数之间;m:=trunc(dbms_random.value*N)+1 select * from MYD where rownum=m;这里的N是MYD的总行数,trunc(dbms_random.value*N)在0到N-1之间, trunc(dbms_random.value*N)则在1到N之间,恰好是rownum的范围;遗憾的是,这里的m,N都必须另外得到,无法在一条语句中得到; 即使可以在一条语句中得到, select * from MYD where rownum=trunc(dbms_random.value*N)+1 也无法达到你想要的效果,这样做可能不返回或者返回多条随机记录;其实4楼的方法很有意思,只是可能不是你想要的。
select * from ( select * from your_table order by dbms_random.value ) where rownum <= 10 随即10条
select dbms_random.value from dual
select * from Ytab sample(N) seed(S)sample(N),N是在区间[0.000001,100)之内的数,可以称呼为命中率.表格或者视图的数据越多则这个函数的效果越好。这个函数在某些时候还是非常有用的.SEED(S)中的S介于[0,4294967295]之间,该函数主要是用于保证返回的结果集合和前次的同样S取值的一样.
seed(s)可以省略。注意,这是在9i,10g上测试过,更早的版本不知道是否有。
但得出的结果不是我要
(select * from MYD )原结果如下:
1 23123 dzh 123123
2 123123 ddd 123123
......
运行(select dbms_random.value from dual)0.82037205153201932436955114873964863588
........
我的意思就是出来的结果感动在一列上了,我想要的是随机的一条记录,谢谢当然谢谢你的帮助!!!!
而且问一个如果在access里面可以跑吗,??还有就是这句话不怎么明白 SEED(S)中的S介于[0,4294967295]之间,该函数主要是用于保证返回的结果集合和前次的同样S取值的一样.
红线部分,谢谢
原理还是一样,就是设置条件
让rownum等于一个随机的自然数,而且这个自然数在1到总行数之间;m:=trunc(dbms_random.value*N)+1
select * from MYD where rownum=m;这里的N是MYD的总行数,trunc(dbms_random.value*N)在0到N-1之间,
trunc(dbms_random.value*N)则在1到N之间,恰好是rownum的范围;遗憾的是,这里的m,N都必须另外得到,无法在一条语句中得到;
即使可以在一条语句中得到,
select * from MYD where rownum=trunc(dbms_random.value*N)+1
也无法达到你想要的效果,这样做可能不返回或者返回多条随机记录;其实4楼的方法很有意思,只是可能不是你想要的。
from
(
select * from your_table order by dbms_random.value
)
where rownum <= 10
随即10条
SELECT TOP 1 *
FROM my
ORDER BY Rnd(id);