提问者:小点点

MYSQL有类似的mt_rand函数吗


MYSQL有类似的mt_rand功能吗?我到处找了,但似乎找不到。


共1个答案

匿名用户

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实现(也许你应该检查这个统计为mySQL)。

相反,如果您寻找一个函数,该函数简单地吐出一个介于min和max之间的随机整数,那么这应该可以做到。

此外,如果我们使用FLOOR作为舍入函数,那么根据我的示例,不可能得到15。

这是因为,从文档中:

RAND()返回范围为0的随机浮点值v

阅读RAND之后,你可以在文档中找到ROUND。。。它指出,舍入具有相当依赖于实现的舍入行为,因此它的行为在mysql版本之间可能会改变(并且已经改变)。这可能就是为什么文件建议用地板而不是圆形来取整兰德的原因。所以,基本上,哪种选择是最好的似乎是有争议的。。。“地板还是圆形,由你选择…”

最后看看这篇文章。这可能看起来很吓人,但至少它清楚地表明这个问题确实“困难”。

兰德公司订单()Jan Kneschke