SQL Server rand()+while循环的使用

1、sql产生随机数sql

使用Rand(),结果是相似于这样的随机小数:0.677416415256926函数

eg:oop

SELECT Rand()

下面四种方法的区别(N表明一个随意的实数):spa

SELECT FLOOR(RAND()*N) ---生成的数是这样的:12.0 
SELECT CAST(FLOOR(RAND()*N) AS INT) ---生成的数是这样的:12 


SELECT CEILING(RAND()* N) ---生成的数是这样的:12.0 
SELECT CAST(CEILING(RAND()* N) AS INT) ---生成的数是这样的:12

注解:code

前两种方法:生成的随机数在0至N-1之间;blog

后两种方法:生成的随机数在1至N之间。 class

 

FLOOR函数返回小于或等于所给数字表达式的最大整数。 

CEILING函数返回大于或等于给数字表达式的最小整数。变量

FLOOR和CFILING返回的数据类型都与输入的数字表达式的数据类型相同。随机数

 

2、构造数据的时候会用到一次性插入多条数据,SQL Server能够经过设置while来循环插入多条数据。以下:循环

DECLARE @id int 
DECLARE @price VARCHAR(6)
DECLARE @loopnum int

SET @id = 1  
SET @price = '1.00'
SET @loopnum = 100

WHILE @id <= 100
BEGIN
    INSERT INTO td_price(id,price) values(@id,@price)
    SET @id = @id + 1 
    SET @price = CONVERT(VARCHAR(6),FLOOR(RAND()*9)) + '.' + CONVERT(VARCHAR(6),FLOOR(RAND()*9)) ---构造价格,随机生成小数
END

 拓展,时间按递增插入数据。经常使用于构造添加数据时使用:

--定义变量
DECLARE @device_id VARCHAR(9)
DECLARE @type_id VARCHAR(3)
DECLARE @state_time VARCHAR(14)
DECLARE @state_value VARCHAR(8)

DECLARE @id int
DECLARE @loopnum int

--初始化变量
SET @device_id = '121108004'    
SET @type_id = '001'    
SET @state_time = '20111202000000'    
SET @state_value = '1.00'    
SET @id = 1

--循环次数,插入数据
WHILE @id <= 100    
BEGIN
    INSERT INTO TD_DeviceStateWork_2014_copy(device_id,type_id,state_time,state_value) 
        values(@device_id,@type_id,@state_time,@state_value)        
    SET @state_time = replace(replace(replace(CONVERT(varchar,Dateadd(second,15,dbo.funStringToDateTime(@state_time)),120),'-',''),' ',''),':','')
    SET @state_value = CONVERT(VARCHAR(6),FLOOR(RAND()*9)) + '.' + CONVERT(VARCHAR(6),FLOOR(RAND()*9))
    SET @id = @id + 1 
END
相关文章
相关标签/搜索