我正在尝试做一些我认为非常简单的事情,只需使用RAND在0-1之间创建一个随机数,并将其分配给十进制变量。 但是每当我在MySQL中运行我的代码时,它都会返回ZERO!
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();
希望有人可以提供帮助。 问候, P
答案 0 :(得分:0)
有几个问题。
声明为DECIMAL的列或过程变量将具有"数字位数"的默认值。 (即精确度)和"小数点右边的位数" (即比例)分配。
`DECIMAL` is equivalent to `DECIMAL(10,0)` which is no digits to the right of the decimal point.
当分配值时,它们将被"截断"或"四舍五入"在适当的范围内,确切的行为取决于操作系统。
作为第二点,MySQL表达式 RAND(145)
不会产生伪随机数;它每次调用时都会产生完全相同的数字。作为参数提供的值是"种子" value,指定伪随机序列的起始点。 (该系列并非真正随机,它似乎是随机的。
运行此语句时,它将返回重复的相同值:
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()
函数将产生一系列伪随机数。