比如数据库中有许多条数据,能在数据库中如何随机取数据吗??简单一点的

解决方案 »

  1.   


    select dbms_random.value from dual
      

  2.   

    用抽样语句即可。应该可以算。
    select * from Ytab sample(N) seed(S)sample(N),N是在区间[0.000001,100)之内的数,可以称呼为命中率.表格或者视图的数据越多则这个函数的效果越好。这个函数在某些时候还是非常有用的.SEED(S)中的S介于[0,4294967295]之间,该函数主要是用于保证返回的结果集合和前次的同样S取值的一样.
    seed(s)可以省略。注意,这是在9i,10g上测试过,更早的版本不知道是否有。
      

  3.   

    首先是可以运行的,我用了oracle10g 做实验的
    但得出的结果不是我要
    (select * from  MYD )原结果如下:
    1         23123      dzh  123123
    2         123123     ddd  123123
    ......
    运行(select dbms_random.value from dual)0.82037205153201932436955114873964863588
    ........
    我的意思就是出来的结果感动在一列上了,我想要的是随机的一条记录,谢谢当然谢谢你的帮助!!!!
      

  4.   

    你的语句可以运行,真如你说的存在命中率的问题,有时候有数据,有时候呢,一条都没的.......
    而且问一个如果在access里面可以跑吗,??还有就是这句话不怎么明白 SEED(S)中的S介于[0,4294967295]之间,该函数主要是用于保证返回的结果集合和前次的同样S取值的一样. 
    红线部分,谢谢
      

  5.   

    用存储过程可以不?不过这样你就只能把改行记录取出来了;
    原理还是一样,就是设置条件
    让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楼的方法很有意思,只是可能不是你想要的。
      

  6.   

    select *
    from 
    (
    select * from your_table order by dbms_random.value

    where rownum  <= 10 
    随即10条
      

  7.   

     这位大哥的,在oracle中可行,但在access里面好像不行啊,有什么办法吗???
      

  8.   

    我老大说的:
    SELECT TOP 1 *
    FROM my
    ORDER BY Rnd(id);
      

  9.   

    我用的是access ,如果是oracle的话,请用 HelloWorld_001大哥地