zoukankan      html  css  js  c++  java
  • mysql rand(x)生产重复随机序列

    MySQL随机函数的两种用法[rand()]

    比如有一个需求,通过sql语句,返回-5至5的随机整数.如果这一个放在PHP中,则非常简单直接用 
    <?php
    print rand(-5,5);
    ?>
    mysql中,rand函数只能有一个参数.
    //摘自手册
    RAND() RAND(N
    返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。

    有两个方法可以达成以上效果.
    1.新建一个表,里面存着 -5 至 5 之间的数.再利用order by rand()得到随机数.
    #建立指定范围数据
    #auther: 小强(占卜师) 
    #date: 2008-03-31

    create table randnumber
    select -1 as number
    union 
    select -2
    union 
    select -3
    union 
    select -4
    union 
    select -5
    union 
    select 0
    union 
    select 1
    union 
    select 2
    union 
    select 3
    union 
    select 4
    union 
    select 5 

    #得到随机数
    #auther: 小强(占卜师) 
    #date: 2008-03-31

    select number
    from randnumber order by rand() limit 1

    优点: 随机数可以指定某部分数据,并不需要连续的.
    缺点: 当随机数范围很广的时候,建表比较困难.
    2.利用MySQL的ROUND()加上RAND()函数实现
    #一句sql语句搞定
    #auther: 小强(占卜师) 
    #date: 2008-03-31

    SELECT ROUND((0.5-RAND())*2*5) 
    #注释
    #0.5-rand()可以得到-0.5 至 +0.5的随机数
    #(0.5-rand())*2可以得到-1 至 +1的随机数
    #(0.5-rand())*2*5可以得到-5 至 +5的随机数
    #ROUND((0.5-RAND())*2*5)可以得到-5 至 +5的随机整数



    优点: 当随机数范围很广的时候,只需要更改*5当中的5即可,非常方便.
    缺点: 随机数只能是连续的,不可以指定某部分数据.
    原创文章,欢迎转载。转载请注明来自[phpchina.com]即可。两

    [ 本帖最后由 coolstr 于 2008-3-31 13:52 编辑 ]
  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/lexus/p/1890171.html
Copyright © 2011-2022 走看看