프로젝트는 8자리, 5자리 등 고정된 자릿수의 난수를 동적으로 무작위로 생성해야 합니다.
전에 쓴 걸 보니 이렇습니다
ROUND(ROUND(RAND(),5)*100000)
이런 쓰는 방식은 그다지 정확하지는 않지만, 이 경우 Rand() 함수는 0~1(무한히 닫히는)을 취하는 랜덤함수입니다
특정 난수를 빼면 0.05321
, 변환된 숫자는 5321로 4자리만 있습니다.
값을 받아보고 자릿수가 틀린 것을 발견하면 그냥 함수로 마무리하면 딱 좋을 것 같습니다.
다음은 제가 수정한 함수인데, 생성되는 함수의 개수가 20자리를 넘을 수 없다는 것이 단점입니다. 물론 변경할 수 있습니다.
DELIMITER $$
`prvecard`$$ 사용
`getRand`$$가 존재하는 경우 삭제 기능
CREATE DEFINER=`PECARD`@` %` FUNCTION `getRand`(counts INTEGER) RETURNS VARCHAR(20) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(20);
DECLARE sTempCounts INTEGER;
SET sTemp = CONCAT( RO UND (ROUND( RAND(), 개수)*(POW (10, 개수))),); );
SET sTemp = CONCAT(sTemp, RIGHT(CONCAT(POW(10,sTempCounts),),sTempCounts)) ;
END IF;
RETURN sTemp;
END$$
DELIMITER ;