SQL从数据库中随机取数据(原文转自博客园)

如何随机取记录?(MSSQL、Access、MySql)

1、数据量少的时候可以使用sql自带的newid()函数
select top 7 from table order by newid()
select top 5 a.columName from (select distinct columName from tableName) a order by newid()  

2、数据量大则不适合用上述方法了,简单算法:
统计表里所有的数据  N,然后返回一个小于N的随机数,再选择一条ID大于N就行了!
SELECT TOP 10 *
FROM TB1
WHERE (id > CAST(FLOOR(RAND() *
          (SELECT COUNT(id)
         FROM [ TB1])) AS int))

随机提取10条记录的例子:
Sql  server:

        select  top  10  *  from  表  order  by  newid()

Access:

        SELECT  top  10  *  FROM  表  ORDER  BY  Rnd(id)  

Rnd(id)  其中的id是自动编号字段,可以利用其他任何数值来完成

比如用姓名字段(UserName)

        SELECT  top  10  *  FROM  表  ORDER  BY  Rnd(len(UserName))  

MySql:

        Select  *  From  表  Order  By  rand()  Limit  10
==========================================================
ACCESS可以用RND函数结合ASP中的RND函数来实现随机抽取。 
<% 
... 
Randomize 
strSQL = "SELECT TOP 1 字段列表 FROM 表名 ORDER BY RND(-(编号字段)*" & RND() & ")" 
... 
%>
===============================================
要产生指定范围的随机整数,请使用以下公式: 
Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 
这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界
==========================================================
随机提取10条记录的例子: 

Sql server: 

select top 10 * from 表 order by newid() 

Access: 

SELECT top 10 * FROM 表 ORDER BY Rnd(id) 

Rnd(id) 其中的id是自动编号字段,可以利用其他任何数值来完成 

比如用姓名字段(UserName) 

SELECT top 10 * FROM 表 ORDER BY Rnd(len(UserName)) 

MySql: 

Select * From 表 Order By rand() Limit 10
 
 
========================================================
select top 4 * from DataTable order by rnd(-(id+rnd()))
 
=====================================================
ASP&Access随机读取某段数据

在网上也搜索了很多,分享下我的方法...
以下是源代码:
Randomize(Timer()) 
SQL = "SELECT TOP 100 ID FROM table1 ORDER BY Rnd(-(ID + " & Int((10000 * Rnd) + 1) & "))" 
Set RS = Server.CreateObject("ADODB.RecordSet") 
RS.Open SQL,Conn,1,1 
If Not RS.EOF Then 
       RS.MoveFirst 
       For I = 1 To RS.RecordCount 
              Response.Write RS(0) & "<br>" 
              RS.MoveNext 
       Next 
End If 
RS.Close 
Set RS = Nothing

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值