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
相關文章
相關標籤/搜索