プロジェクトでは、8 桁、5 桁などの固定桁数の乱数を動的かつランダムに生成する必要があります。
以前見た書き方はこんな感じです
ROUND(ROUND(RAND(),5)*100000)
この書き方はあまり正確ではありません The Rand() の可能性があります。関数は 0 ~ 1 (無限に近い) のランダム関数を受け取ります
ある乱数を取り出した場合、それが 0.05321
このように変換された結果は 5321 となり、4 桁しかありません。
値を取得して桁数が間違っていることがわかったら、その桁を埋めるだけで関数でラップできれば完璧です。
以下は私が変更した関数ですが、生成された関数は20桁を超えることができないという欠点があります。もちろん、変更することもできます。
DELIMITER $$
USE `prvecard`$$
DROP FUNCTION IF EXISTS `getRand`$$
CREATE DEFINER=`PECARD`@`%` FUNCTION `getRand`(counts INTEGER) RETURNS VARCHAR(20) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(20);
DECLARE sTempCounts INTEGER; IF(CHAR_LENGTH (sTemp)
SET sTempCounts = counts - CHAR_LENGTH(sTemp);
SET sTemp = CONCAT(温度, RIGHT(CONCAT (POW(10,sTempCounts),),sTempCounts));
END IF;
RETURN sTemp;
END$$
DELIMITER ;