• 在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是一个你指定的整数,表是取得记录的条数

     

  • 相关阅读:
    基于连通性状态压缩的动态规划问题
    2005年IT行业趋势Top10
    企业应用之性能实时度量系统演变
    云计算参考架构几例
    在CentOS上构建.net自动化编译环境
    Asp.net SignalR 实现服务端消息推送到Web端
    餐饮行业解决方案之客户分析流程
    餐饮行业解决方案之采购战略制定与实施流程
    餐饮行业解决方案之业务设计流程
    零售连锁专卖信息化解决方案简介之三
  • 原文地址:https://www.cnblogs.com/superfeeling/p/9199707.html
Copyright © 2020-2023  润新知