• (转)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之间任一整数
    对于这个区别,看SQL的联机帮助就知了:
    ------------------------------------------------------------------------------------

    比较 CEILING 和 FLOOR

    CEILING 函数返回大于或等于所给数字表达式的最小整数。FLOOR 函数返回小于或等于所给数字表达式的最大整数。例如,对于数字表达式 12.9273,CEILING 将返回 13,FLOOR 将返回 12。FLOOR 和 CEILING 返回值的数据类型都与输入的数字表达式的数据类型相同。
    ----------------------------------------------------------------------------------
    现在,各位就可以根据自己需要使用这两种方法来取得随机数了^_^

    另外,还要提示一下各位菜鸟,关于随机取得表中任意N条记录的方法,很简单,就用newid():
    select top N * from table_name order by newid() ----N是一个你指定的整数,表是取得记录的条数.

    从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之间任一整数
    对于这个区别,看SQL的联机帮助就知了:
    ------------------------------------------------------------------------------------

    比较 CEILING 和 FLOOR

    CEILING 函数返回大于或等于所给数字表达式的最小整数。FLOOR 函数返回小于或等于所给数字表达式的最大整数。例如,对于数字表达式 12.9273,CEILING 将返回 13,FLOOR 将返回 12。FLOOR 和 CEILING 返回值的数据类型都与输入的数字表达式的数据类型相同。
    ----------------------------------------------------------------------------------
    现在,各位就可以根据自己需要使用这两种方法来取得随机数了^_^

    另外,还要提示一下各位菜鸟,关于随机取得表中任意N条记录的方法,很简单,就用newid():
    select top N * from table_name order by newid() ----N是一个你指定的整数,表是取得记录的条数.

  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3865537.html
Copyright © 2020-2023  润新知