mysql选择随机整数

bnl4lu3b  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(356)

我想创建一个mysql查询,在其中我在两个值(包括那些值(在下面的示例中为1和5))之间选择一个随机数,这个随机值构成where子句的一部分。如何做到这一点。
我的代码如下: SELECT * WHERE Col7 = (RAND()*(5-1+1)+1)

h4cxqtbf

h4cxqtbf1#

您可能需要对随机生成的数字进行四舍五入
如果您需要一个介于1和5之间的随机数(包括两者),您的查询可能是:

SELECT * WHERE Col7 = FLOOR(1 + RAND() * (5 + 1 - 1))

如果您需要一个介于2和7之间的随机数(包括两者),您的查询可能是:

SELECT * WHERE Col7 = FLOOR(2 + RAND() * (7 + 1 - 2))
xjreopfe

xjreopfe2#

只是为了解决方案的多样性

SET @rnd := rand();
SELECT * WHERE Col7 = CASE WHEN @rnd < 0.2 THEN 1 
                           WHEN @rnd < 0.4 THEN 2 
                           WHEN @rnd < 0.6 THEN 3 
                           WHEN @rnd < 0.8 THEN 4 
                           ELSE 5 
                      END
qq24tv8q

qq24tv8q3#

您可以使用以下命令 RAND 以及 FLOOR :

SELECT FLOOR(1 + (RAND() * 5));

因此,您的查询如下所示:

SELECT * FROM table_name WHERE Col7 = FLOOR(1 + (RAND() * 5))

返回随机浮点值 v 在范围内 0 <= v < 1.0 . 获取随机整数 R 在范围内 i <= R < j ,使用表达式 FLOOR(i + RAND() * (j − i)) . 例如,要获得范围内的随机整数 7 <= R < 12 ,使用以下语句: SELECT FLOOR(7 + (RAND() * 5)); source:https用法://dev.mysql.com/doc/refman/8.0/en/mathematic functions.html#function#rand
也可以创建新的 FUNCTION 用这些来代替 RAND 功能:

CREATE FUNCTION RAND_INT (minVal INT, maxVal INT)
RETURNS INT DETERMINISTIC
RETURN FLOOR(minVal + (RAND() * (maxVal + 1 - minVal)));

您可以使用创建的函数 RAND_INT 这样地:

SELECT * FROM table_name WHERE Col7 = RAND_INT(1, 5);

相关问题