zoukankan      html  css  js  c++  java
  • sql newid()随机函数

    从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid() order by  一般是根据某一字段排序,newid()的返回值 是uniqueidentifier ,order by  newid()随机选取记录是如何进行的 newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序.  所以最终结果再按这个排序, 排序的结果当然就是无序的了 或者 select   top   10   *,newid()   as    Random   from   ywle where   ywlename='001'   ordey   by   Random 下者效率要高些  因为newid()返回的是uniqueidentifier类型的唯一值。newid()每次产生的值都不一样,那么根据这样的值进行排序,每次的结果  也是不一样的。

    原理是 把所有的ID出取然后用随机函数取出其中一个,然后用这个随机取到的ID去数据库里再取出记录,所有代价有点大。

    sql server的随机函数newID()和RAND()

    SELECT * FROM Northwind..Orders ORDER BY NEWID() --随机排序

    SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID()  --从Orders表中随机取出10条记录

    示例

    A.对变量使用 NEWID 函数 以下示例使用 NEWID() 对声明为 uniqueidentifier 数据类型的变量赋值。在测试  uniqueidentifier 数据类型变量的值之前,先输出该值。 -- Creating a local variable with  DECLARESET syntax. DECLARE @myid uniqueidentifier SET @myid =  NEWID() PRINT 'Value of @myid is '+ CONVERT(varchar(255),  @myid) 下面是结果集: Value of @myid is  6F9619FF-8B86-D011-B42D-00C04FC964FF 注意:  NEWID  对每台计算机返回的值各不相同。所显示的数字仅起解释说明的作用。

    随机函数: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

        其中里面的N是一个你指定的整数,如100,可以看出,两种方法的A方法是带有.0这个的小数的,而B方法就是真正的整数了。      大致一看,这两种方法没什么区别,真的没区别?其实是有一点的,那就是他们的生成随机数的范围: 方法1的数字范围:0至N-1之间,如cast(  floor(rand()*100) as int)就会生成0至99之间任一整数 方法2的数字范围:1至N之间,如cast(ceiling(rand() *  100) as int)就会生成1至100之间任一整数

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/leavind/p/3415388.html
Copyright © 2011-2022 走看看