看起来兰德是我需要的东西,但我在理解它是如何工作方面遇到了一些麻烦。
我需要在60到120之间插入几千行的随机数。表名是:列表,列名是:hits
你可以帮忙吗?答案 0 :(得分:22)
要生成一个介于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
。
答案 1 :(得分:3)
以下是如何获取范围内的随机数。以下可能有点含糊不清,因为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
答案 2 :(得分: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]。
答案 3 :(得分:0)
当我遇到这种问题时,我尝试了手册,但我有超过500行,
我在逻辑上带来了一个帮助我的技巧,因为如果你在查询时运行RAND,
由于重复项或OR PRIMARY KEY问题,您最终可能会收到错误报告,特别是如果该列是PRIMARY KEY
和AUTO INCREMENT
。
更新历史记录SET id = FLOOR(217 + RAND()* 2161)
这会自动创建一个随机数,之后我删除了重命名的IDS colume
来自MICHAEL的信誉。 谢谢