mysql function生成指定位数且不重复数字

会飞的鱼 6月前 ⋅ 134 阅读

1.生成指定位数且不重复数字

2.函数结构

CREATE DEFINER=`root`@`%` FUNCTION `fun_sn`(number BIGINT) RETURNS bigint(20)
BEGIN
	DECLARE v_flag TINYINT DEFAULT 1;
	DECLARE v_result BIGINT DEFAULT 0;
	DECLARE v_count INT(10) DEFAULT 0;
  DECLARE v_num VARCHAR(50) DEFAULT '';
  DECLARE i int DEFAULT 1;
	
	WHILE i<=number DO
		set v_num=CONCAT(v_num,'9');
		set i=i+1;
	END WHILE;
	
	REPEAT
		SELECT CAST(FLOOR(RAND() * v_num) AS SIGNED) INTO v_result;
			 SELECT COUNT(1) INTO v_count FROM s_say WHERE id = v_result;
			 IF v_count = 0 THEN
					SET v_flag=0;
			 END IF;
			 IF v_result = NULL||v_result = 0 THEN
					SET v_flag=1;
			 END IF;		
	UNTIL v_flag=0
	END REPEAT;

	RETURN v_result;
END

3.使用

SELECT fun_sn(10);

4.扩展

更换s_say表名和id字段名称即可

5.问题:

如果产生的随机数表里的id都存在就会进入死循环,所以我们尽量位数number设置大一点,不要设置两三位去跑。


全部评论: 0

    我有话说: