zoukankan      html  css  js  c++  java
  • 在Sqlserver中生成随机数据

    百度了各种随机生成,集中摘录如下:

    一、循环写入千万级测试数据

    DECLARE @i int  
    SET @i = 1  
    WHILE (@i <=10000000)  
    BEGIN  
    INSERT INTO A_User(username,password,addtime,token,roleid)  
    VALUES('manage6'+CONVERT( CHAR(12), cast(ceiling(rand() * @i*10) as int) ),CONVERT( CHAR(12), cast(ceiling(rand() * @i) as int) ),'2016-11-08 05:01:40',CONVERT( CHAR(14), cast(ceiling(rand() * @i*100) as int) ),cast(ceiling(rand() * 6) as int))  
    SET @i = @i + 1  
    END  
    GO  

    二、生成一段时间内的随机时间

    --生成一段时间内的随机时间
    declare @Date_start datetime 
    declare @Date_end datetime 
    set @Date_start= '2018-06-01' 
    set @Date_end=getdate() 
    select 时间=dateadd(minute,abs(checksum(newid()))%(datediff(minute,@Date_start,@Date_end)+1),@Date_start) 

    三、随机生成中文名字

    DECLARE @fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20))    -- 姓氏
    DECLARE @lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20))    -- 名字
    
    INSERT @fName VALUES
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),('')
    
    INSERT @lName VALUES (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    ('殿'),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),(''),('广'),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),(''),(''),(''),('鸿'),(''),(''),(''),(''),(''),(''),
    (''),(''),(''),(''),('')
    
    -- 生成名字
    SELECT RTRIM((SELECT NAME FROM @fName WHERE Id = Round(Rand()*(100-1)+1,0)))
    +RTRIM(LTRIM((SELECT NAME FROM @lName WHERE Id = Round(Rand()*(100-1)+1,0))))
    +RTRIM(LTRIM((SELECT NAME FROM @lName WHERE Id = Round(Rand()*(100-1)+1,0)))) AS 名字

    四、生成随机手机号

    IF EXISTS(SELECT * FROM sysobjects WHERE name='proc_PhoneNum')
        DROP PROCEDURE proc_PhoneNum
    GO
    CREATE PROCEDURE proc_PhoneNum
        @randCardID varchar(19) OUTPUT,      --输出参数
        @firstNo varchar(4)='132 '   --输入参数,有默认值
        AS
            DECLARE @r numeric(15,8)   --15位数,保留8位小数
            DECLARE @tempStr char(10)
    
            select @r=RAND((DATEPART(mm,GETDATE())*100000)+(DATEPART(ss,GETDATE())*1000)+DATEPART(ms,GETDATE()))
            SET @tempStr=@r
            SET @randCardID=@firstNo+SUBSTRING(@tempStr,3,4)+' '+SUBSTRING(@tempStr,7,4)
    GO
    --测试
    DECLARE @phoneNum nvarchar(20)
    EXECUTE proc_PhoneNum @phoneNum OUTPUT
    print '产生的随机手机号为:'+@phoneNum
    --insert phones values(@phoneNum)

    五、生成一定范围的随机数

    在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数。那就看下面的两种随机取整数的方法:
    1、

    select  floor(rand()*N)  ---生成的数是这样的:12.0
    select cast( floor(rand()*N) as int)  ---生成的数是这样的:12

    2、

    select ceiling(rand() * N)  ---生成的数是这样的:12.0
    select cast(ceiling(rand() * N) as int)  ---生成的数是这样的:12

    其中里面的N是一个你指定的整数,如100,可以看出,两种方法的A方法是带有.0这个的小数的,而B方法就是真正的整数了。
    大致一看,这两种方法没什么区别,真的没区别?其实是有一点的,那就是他们的生成随机数的范围:
    方法1的数字范围:0至N-1之间,如

    cast( floor(rand()*100) as int)

    就会生成0至99之间任一整数

    方法2的数字范围:1至N之间,如

    cast(ceiling(rand() * 100) as int)

    就会生成1至100之间任一整数

    对于这个区别,看SQL的联机帮助就知了:

    比较 CEILING 和 FLOOR

    CEILING 函数返回大于或等于所给数字表达式的最小整数。FLOOR 函数返回小于或等于所给数字表达式的最大整数。例如,对于数字表达式 12.9273,CEILING 将返回 13,FLOOR 将返回 12。FLOOR 和 CEILING 返回值的数据类型都与输入的数字表达式的数据类型相同。
    ----------------------------------------------------------------------------------
    现在,各位就可以根据自己需要使用这两种方法来取得随机数了^_^

    另外,还要提示一下各位菜鸟,关于随机取得表中任意N条记录的方法,很简单,就用newid():

    select top N *  from table_name order by newid() ----N是一个你指定的整数,表是取得记录的条数

     

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/superfeeling/p/9199707.html
Copyright © 2011-2022 走看看