sql随机读取有两种方式:newid()和rand();
newid:
SELECT * FROM Northwind..Orders ORDER BY NEWID() --随机排序
SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID() --从Orders表中随机取出10条记录
原理是:把所有的ID取出,然后用随机函数取出其中一个,然后用这个随机取到的ID去数据库里再取出记录,所以代价有点大。newid在扫描数据库的每条记录时候,会随机产生一个id, 返回的uniqueidentifier类型的唯一值。多了一个扫描记录产生随机id的操作。
rand:
在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会 取随机整数。那就看下面的两种随机取整数的方法:
1、A:select floor(rand()*N) ---生成的数是这样的:12.0
B:select cast( floor(rand()*N) as int) ---生成的数是这样的:12
2、A:select ceiling(rand() * N) ---生成的数是这样的:12.0
B:select cast(ceiling(rand() * N) as int) ---生成的数是这样的:12
方法1的数字范围:0至N-1之间,如cast( floor(rand()*100) as int)就会生成0至99之间任一整数
方法2的数字范围:1至N之间,如cast(ceiling(rand() * 100) as int)就会生成1至100之间任一整数
注:cast和conver类似,但是 使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, style]) 可以看到,convert比CAST多了一个style,在转化成日期类型时,因为需要格式要求,cast就不合适了,应该还有其他一些需要转化格式的,比如金钱等等,这个看看帮助就知道了。 其他时候,二者实现的功能都一样。 都是转化类型的函数