mysql 随机函数生成某个范围内的整数

摘要:
此外,它也可以通过使用round函数来实现。考虑到第一个和最后一个值的概率不等于中间值的概率,添加0.5以消除概率差异并实现均匀分布:生成[i,j]范围内的正整数:selectround要获得7到12范围内的随机整数,可以使用以下语句:SELECT round;如果生成了负整数,请注意,最左边的值可能超过您的要求:mysql˃SELECT round+---------------+| round |+---------------+|-1|+---------------+1 rowinsetmysql˃SELECTround;+------------+|舍入|+-------------------+|0|+-------------------+1当生成正整数以获得负整数范围时,下集可以减去相应的值。然而,楼层功能可以避免上述问题。

根据官方文档,rand()的取值范围为[0,1)

若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))
例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:
SELECT FLOOR(7 + (RAND() * 6));

用到了2个函数

1、floor(f)

     返回一个不大于f的最大整数

2、rand(),rand(n)

     返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。


另外,也可以用round四舍五入函数来实现,考虑到最前与最后的取值概率会与中间的不相等,故加上0.5来消除这种概率上的差异,达到均匀分布:

产生[i,j]范围整数:select round(rand()*(j-i+1)+i-0.5)

若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:
SELECT round( (RAND() * 6+6.5));

如果产生负整数的话得注意最左边的值有可能会超过你的要求:

mysql> SELECT round(-0.5);
+-------------+
| round(-0.5) |
+-------------+
|          -1 |
+-------------+
1 row in set (0.00 sec)

mysql> SELECT round(-0.4);
+-------------+
| round(-0.4) |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)

可以在产生正整数的情况下再减去一个相应的值,得到一个负整数范围,不过用floor函数可以避免上面的问题。

在Mysql中可以执行如下命令查看某个主题的说明文档,即? 主题,如下:

mysql> ? rand
Name: 'RAND'
Description:
Syntax:
RAND(), RAND(N)

Returns a random floating-point value v in the range 0 <= v < 1.0. If a
constant integer argument N is specified, it is used as the seed value,
which produces a repeatable sequence of column values. In the following
example, note that the sequences of values produced by RAND(3) is the
same both places where it occurs.

URL: http://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html

Examples:
mysql> CREATE TABLE t (i INT);
Query OK, 0 rows affected (0.42 sec)

mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.61914388706828 |
|    2 | 0.93845168309142 |
|    3 | 0.83482678498591 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.35877890638893 |
|    2 | 0.28941420772058 |
|    3 | 0.37073435016976 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.01 sec)

免责声明:文章转载自《mysql 随机函数生成某个范围内的整数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Chart控件文档如何使用 SPICE client (virt-viewer) 来连接远程虚拟机桌面?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

文档根元素 "select" 必须匹配 DOCTYPE 根 "null"

在idea中运行时发现这个错误,然后上网搜索才发现,就是在mapper包下配置的数据库语句有问题 错误的写法是这样的 而我就这样复制粘贴抄上了,实际上应该是下面这种写法,也就是mybatis的xml文件文件头问题,下面是正确的写法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapp...

docker 安装部署 mysql(配置文件启动)

获取 mysql 镜像 docker pull mysql:5.6 docker images 创建容器 创建宿主机 redis 容器的数据和配置文件目录 # 创建宿主机 redis 容器的数据和配置文件目录 mkdir /data/docker/mysql_3306/{conf,data} -p cd /data/docker/mysql_3306 获取...

Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用

//方法一,可以验证登录,但方法不实用。packagecom.swift; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement...

application.properties文件配置

  在application.properties文件中配置mysql连接配置文件。 spring.datasource.url = jdbc:mysql://localhost:3306/DatebaseName(自己数据库名)spring.datasource.username = rootspring.datasource.password = 12...

伪表和伪列

oracle的伪列以及伪表 oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Oracle完成的。Oracle目前有以下伪列: 一、伪列: CURRVAL AND NEXTVAL 使用序列号的保留字 LEVEL 查询数据所对应的层级 ROWI...

MySQL 8.0.23 安装配置向导

前提 操作系统:Windows 7 64位旗舰版 MySQL版本:mysql-8.0.23-winx64.zip 1 准备 1.1下载 下载地址:https://dev.mysql.com/downloads/mysql/ 1.2解压 解压到任意非中文目录,如:D:appsmysql-8.0.23-winx64 2 配置 2.1 解压目录中新建my.i...