设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 314|回复: 0
打印 上一主题 下一主题

Mysql 生成固定位数的随机数 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2012-8-20 06:39:36 |只看该作者 |倒序浏览
    项目中需要动态随机生成一些固定位数的随机数,如8位,5位等。
    之前看到的写法是这样
    ROUND(ROUND(RAND(),5)*100000)
    这样写不太准确,有几率出现4位的情况,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;
           SET sTemp = CONCAT( ROUND(ROUND(RAND(),counts)*(POW(10,counts))),);
       
        IF(CHAR_LENGTH(sTemp)<counts) THEN
       
          SET sTempCounts = counts - CHAR_LENGTH(sTemp);
          SET sTemp = CONCAT(sTemp, RIGHT(CONCAT(POW(10,sTempCounts),),sTempCounts));
        END IF;
       
          RETURN sTemp;
    END$$
    DELIMITER ;
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-1 21:45 , Processed in 0.093747 second(s), 27 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部