
Server-->
SELECT
TOP
50
*
FROM
TAB_USERS
ORDER
BY
NEWID()
ORACLE-->
SELECT
*
FROM
(SELECT
*
FROM
TAB_USERS
ORDER
BY
DBMS_RANDOM.RANDOM())
WHERE
RONUM<=50
MYSQL-->
SELECT
*
FROM
TAB_USERS
ORDER
BY
RAND()
LIMIT
50
{
ACCESS-->
SELECT
TOP
50
*
FROM
TAB_USERS
ORDER
BY
RND([字段])
这条语句在ACCESS中的查询结果是正确的,但在ASP.NET等后台代码要写成如下:
Random
random=new
Random(System.Guid.NewGuid().GetHashCode())
int
val=random.Next()
string
sql="SELECT
TOP
50
*
FROM
TAB_USERS
ORDER
BY
RND("+(-r)+"字段)"
}
oracle随机读取表中的N条数据方法:123
1) select * from (select * from tablename order by sys_guid()) where rownum <N2) select * from (select * from tablename order by dbms_random.value) where rownum<N3) select * from (select * from table_name sample(10) order by trunc(dbms_random.value(0, 1000))) where rownum <N
说明: sample(10)含义为检索表中的10%数据,sample值应该在[0.000001,99.999999]之间,其中 sys_guid() 和 dbms_random.value都是内部函数
注:在使1)方法时,即使用sys_guid() 这种方法时,有时会获取到相同的记录,即:和前一次查询的结果集是一样的(可能是和 *** 作系统有关:windows正常,linux异常;也可能是因为sys_guid()函数本身的问题,有待继续研究)所以,为确保在不同的平台每次读取的数据都是随机的,建议采用2)和3)两种方案,其中2)方案更常用。3)方案缩小了查询的范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有一定的提高
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)