看起来我需要使用RAND函数,但我有些难以理解它的工作原理。
我需要在几千行中插入60到120之间的随机数。表名为:listing,列名为:hits。
您能帮忙吗?
要生成一个介于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>);
注意:我认为我的算术上是正确的,但如果您获得预期范围之外的59或121值,请相应地向上或向下更改+60
。
以下是如何在指定范围内获取随机数字的方法。由于61实际上是您的最大值(120)减去您的最小值(60)再加1,以获得包括结果,因此以下内容可能有些模糊。
SELECT FLOOR(60 + (RAND() * 61));
SELECT FLOOR(MIN_Value + (RAND() * (MAX_Value - MIN_Value) + 1);
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand
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] 区间内。
当我遇到这种问题时,我尝试了手动方法,但是我有超过500行,
我想出了一个逻辑上的技巧,帮助我解决了这个问题,因为如果你在查询中运行RAND,
由于重复项或主键问题,你可能会得到错误报告,特别是如果该列是PRIMARY KEY
和AUTO INCREMENT
。
UPDATE history SET id = FLOOR( 217 + RAND( ) *2161 )
这将自动生成随机数字,稍后我删除了重命名的IDS列
感谢MICHAEL提供的建议。 谢谢