You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB生成排除指定数值的1-50随机数方法咨询

生成排除指定数值的1-50随机数(MariaDB 11.1.2)

针对你的需求,这里提供两种可靠的实现方法:

方法一:循环过滤法(逻辑简单易维护)

通过生成随机数后检查是否属于排除列表,若不符合则重新生成,直到得到符合要求的数值。可以创建一个自定义函数来复用:

DELIMITER //
CREATE FUNCTION get_random_with_exclusions() RETURNS INT
BEGIN
    DECLARE rand_num INT;
    -- 循环生成直到数值不在排除列表中
    REPEAT
        SET rand_num = FLOOR(RAND() * 50) + 1;
    UNTIL rand_num NOT IN (5, 11, 21) END REPEAT;
    RETURN rand_num;
END //
DELIMITER ;

调用方式:

SELECT get_random_with_exclusions();

如果不想创建函数,也可以用递归查询实现(适合临时使用):

WITH RECURSIVE rand_cte AS (
    SELECT FLOOR(RAND() * 50) + 1 AS num
    UNION ALL
    SELECT FLOOR(RAND() * 50) + 1 AS num FROM rand_cte WHERE num IN (5, 11, 21)
)
SELECT num FROM rand_cte LIMIT 1;

方法二:数值映射法(效率更高)

因为你只排除3个固定数值,总可用数为47个,先生成1-47的随机数,再通过映射规则转换为1-50中排除指定值的结果,避免循环:

SELECT 
    CASE
        WHEN x < 5 THEN x
        WHEN x < 11 THEN x + 1
        WHEN x < 21 THEN x + 2
        ELSE x + 3
    END AS random_num
FROM (SELECT FLOOR(RAND() * 47) + 1 AS x) AS t;

映射逻辑说明:

  • 生成1-47的随机数x,对应排除后的47个有效数值
  • 当x <5:直接返回x(未触及第一个排除值5)
  • 当5<=x <11:返回x+1(跳过排除值5)
  • 当11<=x <21:返回x+2(跳过排除值5、11)
  • 当x >=21:返回x+3(跳过所有3个排除值)

内容的提问来源于stack exchange,提问作者SPlatten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:27:52