如何在mysql中插入随机值?

9

看起来我需要使用RAND函数,但我有些难以理解它的工作原理。

我需要在几千行中插入60到120之间的随机数。表名为:listing,列名为:hits。

您能帮忙吗?

4个回答

23

要生成一个介于60到120之间的随机整数,您需要对RAND()函数的结果进行一些算术运算,因为该函数只生成浮点数:

SELECT FLOOR(60 + RAND() * 61);

这里发生了什么:

RAND()会生成像0.847269199这样的值。我们将它乘以61,得到值51.83615194。我们加上60,因为那是你希望在零以上的偏移(即111.83615194)。FLOOR()四舍五入到最接近的整数。最终,你得到了111。

要在几千个现有行中执行此操作:

UPDATE table SET randcolumn = FLOOR(60 + RAND() * 61) WHERE (<some condition if necessary>);

请参阅MySQL文档中有关RAND()函数的更多示例

注意:我认为我的算术上是正确的,但如果您获得预期范围之外的59或121值,请相应地向上或向下更改+60


这将只产生[0;120)范围内的数字 - 你需要乘以61。 - emboss
@emboss 它生成了 [60:119],而不是 [0:120],但你关于 61 倍数的说法是正确的。 - Michael Berkowski
谢谢大家。我不得不读了三遍才理解,但是我懂了…查询很棒! - Andi

6

1
UPDATE X SET C = FLOOR(61 * RAND() + 60) WHERE ...;

获取介于60到120之间(包括60和120)的数字;

RAND() 生成的数字在区间[0,1)内(不包括1)。因此,61 * RAND() 可以产生 [0,61) 的一个数。而 61 * RAND() + 60 则位于 [60;121) 区间内。通过向下取整,您可以确保生成的数字处于 [60;120] 区间内。


0

当我遇到这种问题时,我尝试了手动方法,但是我有超过500行, 我想出了一个逻辑上的技巧,帮助我解决了这个问题,因为如果你在查询中运行RAND, 由于重复项或主键问题,你可能会得到错误报告,特别是如果该列是PRIMARY KEYAUTO INCREMENT

  1. 首先 - 我将涉及的列重命名,例如我的是ID -> IDS
  2. 其次 - 我创建了另一列并称其为ID
  3. 第三 - 我运行了以下代码

UPDATE history SET id = FLOOR( 217 + RAND( ) *2161 )

这将自动生成随机数字,稍后我删除了重命名的IDS列

感谢MICHAEL提供的建议。 谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接