SQL RAND() 函数

SQL RAND 函数


 SQL 有一个 RAND 函数,用于产生 0 至 1 之间的随机数:

    SQL>  SELECT RAND( ), RAND( ), RAND( );
    +------------------+-----------------+------------------+
    | RAND( )          | RAND( )         | RAND( )          |
    +------------------+-----------------+------------------+
    | 0.45464584925645 | 0.1824410643265 | 0.54826780459682 |
    +------------------+-----------------+------------------+
    1 row in set (0.00 sec)

 当以某个整数值作为参数来调用的时候,RAND() 会将该值作为随机数发生器的种子。对于每一个给定的种子,RAND() 函数都会产生一列可以复现的数字:

    SQL>  SELECT RAND(1), RAND( ), RAND( );
    +------------------+------------------+------------------+
    | RAND(1 )         | RAND( )          | RAND( )          |
    +------------------+------------------+------------------+
    | 0.18109050223705 | 0.75023211143001 | 0.20788908117254 |
    +------------------+------------------+------------------+
    1 row in set (0.00 sec)

 你可以使用 ORDER BY RAND() 来对一组记录进行随机化排列,如下所示:

    SQL> SELECT * FROM employee_tbl;
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    1 | John | 2007-01-24 |                250 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    5 | Zara | 2007-06-06 |                300 |
    |    5 | Zara | 2007-02-06 |                350 |
    +------+------+------------+--------------------+
    7 rows in set (0.00 sec)

 现在,试试下面的命令:

    SQL> SELECT * FROM employee_tbl ORDER BY RAND();
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    5 | Zara | 2007-06-06 |                300 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    5 | Zara | 2007-02-06 |                350 |
    |    1 | John | 2007-01-24 |                250 |
    +------+------+------------+--------------------+
    7 rows in set (0.01 sec)

    SQL> SELECT * FROM employee_tbl ORDER BY RAND();
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    5 | Zara | 2007-02-06 |                350 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    1 | John | 2007-01-24 |                250 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    5 | Zara | 2007-06-06 |                300 |
    +------+------+------------+--------------------+
    7 rows in set (0.00 sec)