2011-08-20 56 views
7

看起来RAND是我需要的,但我在理解它的工作原理时遇到了一些麻烦。如何在MySQL中插入一个随机值?

我需要在60和120之间插入一个随机数到几千行。表名是:列表和列名称是:点击

您能否请帮忙?

回答

21

为了使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>); 

更多的例子见the MySQL docs on RAND()

注意我认为我有算术权,但如果您得到预期范围之外的59或121的值,则相应地将+60更改为上或下。

+0

这只会产生[0; 120]中的数字 - 您需要乘以61. – emboss

+0

@emboss它产生了[60:119],而不是[0:120],但您对于61乘数 –

+0

哎呀,是的:)我会纠正这一点...似乎我不能再。 – emboss

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. 第三 -我RAN这个代码

UPDATE历史集ID = FLOOR(217 + RAND()* 2161)

这创造了一个随机数自动,后来我删除重命名的IDS colume

credit from MICHAEL。 谢谢