gpt4 book ai didi

MySql:使用 RAND(种子)为变量分配随机数

转载 作者:行者123 更新时间:2023-11-29 23:57:14 30 4
gpt4 key购买 nike

我正在尝试做一些我认为非常简单的事情,只需使用 RAND 创建 0-1 之间的随机数,并将其分配给十进制变量。但每次我在 MySQL 中运行代码时,它都会返回零!

参见下面的代码:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `myfuncRand`() RETURNS decimal(10,5)
DETERMINISTIC
BEGIN
DECLARE dist decimal;
set dist = RAND(145);
RETURN dist;
END$$


select myfuncRand();

最佳答案

几个问题。

声明为 DECIMAL 的列或过程变量将分配默认值“位数”(即精度)和“小数点右侧的位数”(即小数位数)。

`DECIMAL` is equivalent to `DECIMAL(10,0)` which is no digits to the right of the decimal point.

分配值时,它们将被“截断”或“四舍五入”到适当的比例,确切的行为取决于操作系统。

第二点,MySQL 表达式 RAND(145) 不会产生伪随机数;每次调用它都会产生完全相同的数字。作为参数提供的值是“种子”值,指定伪随机序列的起点。 (该系列并不是真正随机的,只是看起来是随机的。

当该语句运行时,它将重复返回相同的值:

SELECT RAND(145), RAND(145), RAND(145), RAND(145)

当运行此语句时,每次运行都会生成相同的系列:

SELECT RAND(145), RAND(), RAND(), RAND(), RAND()
<小时/>

所以,有两件事需要解决。

dist 过程变量的声明应指定精度和小数位数,例如:

DECLARE dist DECIMAL(10,5); 

(此处选择的精度和小数位值旨在与函数声明返回的数据类型相匹配。如果我们只需要小数点后五位数字,则 DECIMAL(6,5) 就足够了。)

和:

SET dist = RAND();

重复调用RAND()函数将产生一系列伪随机数。

关于MySql:使用 RAND(种子)为变量分配随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255929/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com