百度了各種隨機生成,集中摘錄如下:
一、循環寫入千萬級測試數據
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是一個你指定的整數,表是取得記錄的條數