【发布时间】:2015-11-21 02:24:34
【问题描述】:
MYSQL 有没有类似 mt_rand 的函数?我到处搜索,但似乎找不到。
【问题讨论】:
-
没有种子的 RAND() 可能与 mt_rand() 类似。至于在区间中获取随机数,唯一的想法是使用 RAND() 输出 stackoverflow.com/questions/14865632/… 构建区间
MYSQL 有没有类似 mt_rand 的函数?我到处搜索,但似乎找不到。
【问题讨论】:
DELIMITER $$
CREATE FUNCTION `my_rand`(`arg_min` INT, `arg_max` INT) RETURNS int(11)
BEGIN
RETURN ROUND( arg_min + RAND( ) * (arg_max-arg_min) );
END
调用:
SELECT my_rand(10,15)
将输出一个介于 10 和 15 之间的整数。
作为旁注......如果你想要 mt_rand 的好处,打算使用“Marsenne Twister”,那么我担心你应该寻找一个 UDF 实现(也许你应该检查这个 Statistics for mySQL) .
如果您寻找一个简单地在 min 和 max 之间输出随机整数的函数,这应该可以解决问题。
此外,如果我们将 FLOOR 用作舍入函数,那么根据我的示例,将不可能得到 15。
这是因为,根据文档:
RAND() 返回 0
在 RAND 之后立即阅读,您可以在文档中找到 ROUND ...它指出 ROUND 具有非常依赖于实现的舍入行为,因此它的行为可能会在 mysql 版本之间发生变化(并且已经改变)。这可能是文档建议使用 FLOOR 而不是 ROUND 舍入 RAND 的原因。所以,基本上哪个选择最好是有争议的……“FLOOR or ROUND,做出你的选择……”
最后...看看这篇文章。这可能看起来很可怕,但至少它清楚地表明这个问题确实是“困难的”。
【讨论】: